2017-03-17 409 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