powershell - 如何从具有节点的函数返回 XML 文件?
问题描述
我有一个简单的 XML
<bds>
<bd>
<id>10</id>
<user>john</user>
<servers>
<name>pc24</name>
</servers>
</bd>
<bd>
<id>12</id>
<user>peter</user>
<servers>
<name>pc25</name>
</servers>
</bd>
我有一个函数,我希望它返回一个 XML 文件,其中包含挂在节点上的所有元素。
$collection = "bds"
$attribute = "name"
$obj = "pc25"
function test () {
if ($xml.SelectNodes("//$attribute").name -eq "name") {
return $xml.SelectNodes("//$attribute").parentnode | Where $attribute -eq $obj
}
else {
return $false
}
}
我希望函数的输出是:
<id>12</id>
<user>peter</user>
<servers>
<name>pc25</name>
</servers>
如何生成带有函数返回的 XML 文件?
解决方案
您可以使用稍微更智能的 XPath 来选择节点,然后使用InnerXml
属性来获取您所追求的输出字符串:
PS> $xml = [xml] @"
<bds>
<bd>
<id>10</id>
<user>john</user>
<servers>
<name>pc24</name>
</servers>
</bd>
<bd>
<id>12</id>
<user>peter</user>
<servers>
<name>pc25</name>
</servers>
</bd>
</bds>
"@
PS> $xml.SelectNodes("bds/bd[servers/name = 'pc25']").InnerXml
<id>12</id><user>peter</user><servers><name>pc25</name></servers>
注意 -bds/bd[servers/name = 'pc25']
意思是“找到所有bds/bd
具有值的子servers/name
节点的节点pc25
”。
然后,您可以根据需要使用 XPath 字符串中的变量值将其重新安装到您的函数中......
推荐阅读
- angular - 关于验证错误的 Angular 5 更改选项卡
- html - 内部显示不正确 - 在 2 行而不是 1 行中显示内容
- css - 选择下拉菜单值是 IE 中的重叠下拉菜单,在 firefox/chrome 中工作正常
- java - 在哪里可以找到 String::lines 实现?
- amazon-web-services - kops 上没有 AWS 置放群组,我可以使用其他工具吗?
- c# - ASP.NET Core JwtBearerIdentity 不起作用
- javascript - 评论系统与点击星
- python - 是否可以使用用 R 和 Python 训练的模型
- javascript - 修复 d3 js Sankey 中接收器节点的垂直对齐
- php - 用于非常大文件的 laravel 的 xls 解析器