You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell如何读取XML每个row节点下首个object_tag的uid值

PowerShell提取XML指定节点属性实现方案

原有代码的问题:使用//object_tag作为XPath匹配规则时,会抓取XML文档内所有位置的object_tag节点,每个<row>节点下包含2个object_tag,因此最终输出4个uid结果,和预期不符。

要实现仅提取每个<row>节点下第一个object_tag的uid属性,直接调整XPath匹配规则即可,推荐写法如下:

$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>
"@

# XPath规则说明:匹配所有row节点下的第一个直接子节点object_tag
Select-Xml -Content $Xml -XPath "//row/object_tag[1]" | ForEach-Object {$_.Node.uid}

运行上述代码的输出结果完全符合预期:

TdjJhBMdpQNFhC
DCuJhBMdpQNFhC

如果不熟悉XPath的索引写法,也可以用分步遍历的写法,效果一致:

# 先匹配所有row节点,再逐个提取内部第一个object_tag的uid
Select-Xml -Content $Xml -XPath "//row" | ForEach-Object {
    $_.Node.SelectSingleNode("object_tag[1]").uid
}

注意:XPath的节点索引从1开始计数,取第一个节点时需要写[1],不能用多数编程语言习惯的0起始索引。


内容的提问来源于stack exchange,提问作者Mice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:33:25