根据父节点的属性选择子节点

特克兹

我正在尝试根据父节点的属性从子节点中选择一个值(由于父节点的名称相似)。我需要基于父代属性(ID)从节点获取所有值。

因此,对于每条记录,我都需要相应的值(RECORD / FIELD / DATA / VALUE)。

XML:

<PAGE id="8">
   <RECORD>
      <GUID>83704498-6ee6-4705-9280-0f0fe90e1148</GUID>
      <FIELD id="21">
         <DATA>
           <GUID>4a2bd78d-beab-4508-af76-0d14fe290709</GUID>
           <VALUE>Certificate 1</VALUE>
          </DATA>
      </FIELD>
      <FIELD id="22">
          <DATA>
              <VALUE>2015-01-20</VALUE>
          </DATA>
      </FIELD>
    <RECORD>
      <GUID>83704498-6ee6-4705-9280-0f0fe90e1148</GUID>
      <FIELD id="21">
         <DATA>
           <GUID>4a2bd78d-beab-4508-af76-0d14fe290709</GUID>
           <VALUE>Certificate 2</VALUE>
          </DATA>
      </FIELD>
      <FIELD id="22">
          <DATA>
              <VALUE>2015-01-20</VALUE>
          </DATA>
      </FIELD>
    </RECORD>
 </PAGE>

电源外壳:

$record = $XML.SelectNodes('//PAGE/RECORD') | Select-Object @{'Name' = 'records' ; 'Expression' = { 
$_.FIELD.DATA.VALUE} }, GUID
$recordString = ($record | Out-String)
write-host $recordString

此输出为我提供了正确的值和GUID,但我从所有“ FIELDS”中获取了值,但是我只需要属性ID = 21的字段中的值。

Mathias R. Jessen

使用另一个XPath表达式来仅定位FIELD带有id=21以下内容的DATA节点

$XML.SelectNodes('//PAGE/RECORD') | Select-Object @{
    'Name' = 'records'
    'Expression' = { 
        $_.SelectNodes('FIELD[@id="21"]/DATA/VALUE').innerText
    }
}, GUID

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章