如何只读取xml属性的第一个叶



我有这样的Powershell代码:

$Xml = @"
<?xml version="1.0" encoding="utf-8"?>
<DisplayDefinitionTable>
<columns>
<column_entry order_num="0" relation_to_base="Item.current_name">current_name</column_entry>
</columns>
<rows>
<row>
<object_tag tag="91859" uid="TdjJhBMdpQNFhC"/>
<object_tag tag="86504" uid="TtvJBp53pQNFhC"/>
<row_element column="0" component_tag="91859" property_name="current_name">EAUX</row_element>
</row>
<row>
<object_tag tag="92069" uid="DCuJhBMdpQNFhC"/>
<object_tag tag="86504" uid="TtvJBp53pQNFhC"/>
<row_element column="0" component_tag="92069" property_name="current_name">VISS</row_element>
</row>
</rows>
</DisplayDefinitionTable>
"@
Select-Xml -Content $Xml -XPath "//object_tag" | foreach {$_.node.uid}

结果:

Select-Xml -Content $Xml -XPath "//object_tag" | foreach {$_.node.uid}

TdjJhBMdpQNFhC
TtvJBp53pQNFhC
DCuJhBMdpQNFhC
TtvJBp53pQNFhC
PS C:Windowssystem32> 

主要目标是只获取文件中每个叶的第一个uid值,所以正确的答案应该是这样的:

TdjJhBMdpQNFhC
DCuJhBMdpQNFhC

PS C:Windowssystem32> 

如何做到这一点??感谢

尝试将您的命令指定为:

Select-Xml -Content $Xml -XPath "//object_tag[1]" | foreach {$_.node.uid}

请注意,在XPath中添加[1]以专门提取第一个实例。

或者,您也可以使用以下命令将管道保存到foreach:

(Select-Xml -Content $Xml -XPath "//object_tag[1]").node.uid

以上两种变体都能为您提供所需的结果。

此外,这个关于XPath的伟大备忘单还有一些关于索引等的进一步信息…

使用(加速)标准可能更容易。Net xml解析器这也将更好地针对特定的行/object_taguids,而不是其他级别的所有其他可能的uid

$Xml = [xml]@'
<?xml version="1.0" encoding="utf-8"?>
<DisplayDefinitionTable>
<columns>
<column_entry order_num="0" relation_to_base="Item.current_name">current_name</column_entry>
</columns>
<rows>
<row>
<object_tag tag="91859" uid="TdjJhBMdpQNFhC"/>
<object_tag tag="86504" uid="TtvJBp53pQNFhC"/>
<row_element column="0" component_tag="91859" property_name="current_name">EAUX</row_element>
</row>
<row>
<object_tag tag="92069" uid="DCuJhBMdpQNFhC"/>
<object_tag tag="86504" uid="TtvJBp53pQNFhC"/>
<row_element column="0" component_tag="92069" property_name="current_name">VISS</row_element>
</row>
</rows>
</DisplayDefinitionTable>
'@

和PowerShell Xml点表示法语法:

$xml.DisplayDefinitionTable.Rows.Row.ForEach{ $_.object_tag[0].uid }
TdjJhBMdpQNFhC
DCuJhBMdpQNFhC

最新更新