使用powershell获取xml中属性的元素名称

Jos*_*ose 1 xml powershell xml-parsing

我想使用 powershell 获取属性的节点名称。谁能告诉我我们是否有相同的内置功能。

以下是我的名为 Pricefile.xml 的 xml 文件

 <model type="model1" name="default" price="12.12" date="some_value">
  <PriceData>
    <item name="watch" price="24.28" date="2013-12-01"/>
    <item name="toy" price="22.34" date="2013-12-02"/>
    <item name="bread" price="24.12" date="2013-12-03"/>
  </PriceData>
 </model>
Run Code Online (Sandbox Code Playgroud)

假设我想获取属性“toy”的元素名称“item”。我怎样才能得到这些数据?

这是我到目前为止所拥有的。

[xml]$item = get-content pricefile.xml
$item.SelectNodes("//item/@*")
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出,但我不知道如何从这里获取属性的元素或其父节点。

#text                                                                                                                                                  
-----                                                                                                                                                  
watch                                                                                                                                                  
24.28                                                                                                                                                  
2013-12-01                                                                                                                                             
toy                                                                                                                                                    
22.34                                                                                                                                                  
2013-12-02                                                                                                                                             
bread                                                                                                                                                  
24.12                                                                                                                                                  
2013-12-03 
Run Code Online (Sandbox Code Playgroud)

如果我使用以下任何命令,我不会得到任何输出。

[xml]$item = get-content pricefile.xml

$item.SelectNodes("//item/@*").parentnode

$item.SelectNodes("//item/@*") | where {$_.parentnode}
Run Code Online (Sandbox Code Playgroud)

Mat*_*sen 5

首先,选择name属性值为的元素toy

$toy = $item.SelectSingleNode("//*[@name='toy']")
Run Code Online (Sandbox Code Playgroud)

由于 PowerShell 试图提供帮助,并将name属性公开为对象的属性,因此我们需要对实际标记Name属性使用属性访问器:

$toy.get_Name()
Run Code Online (Sandbox Code Playgroud)