2017-03-17 149 views
0

我想使用powershell获取属性的节点名称。任何人都可以让我知道,如果我们有一个相同的内置函数。使用powershell获取xml中属性的元素名称

下面是我的XML文件名为pricefile.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> 

说我想要得到的属性“玩具”元素名称“项”。我怎样才能得到这些数据?

这是我到目前为止。

[xml]$item = get-content pricefile.xml 
$item.SelectNodes("//item/@*") 

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

#text                                     
-----                                     
watch                                     
24.28                                     
2013-12-01                                    
toy                                      
22.34                                     
2013-12-02                                    
bread                                     
24.12                                     
2013-12-03 

如果我使用下面的任何一个命令,我就没有输出。

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

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

$item.SelectNodes("//item/@*") | where {$_.parentnode} 

回答

1

给定一个XmlAttribute对象,开始时,你可以通过OwnerElement属性来获取父元素。请注意,ParentNode在此处不起作用,因为它的值始终为空XmlAttribute

​​
2

首先,选择具有name属性值toy元素:

$toy = $item.SelectSingleNode("//*[@name='toy']") 

因为PowerShell是尝试是有益的,并露出name属性作为对象上的属性,我们将需要使用属性访问器的实际标签Name属性:

$toy.get_Name() 
2

这里是xpath方法:

[xml]$item = @' 
    <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> 
'@ 

(Select-XML -Xml $item -XPath "//item[@name=""toy""]").Node 
(Select-XML -Xml $item -XPath "//item[@name=""toy""]").Node.get_Name() 
1

这里的另一种方式来获得所需的信息:

$item.model.PriceData.Item | ? name -eq toy 
相关问题