使用powershell获取xml中属性的元素名称
问题描述:
我想使用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}
答
首先,选择具有name
属性值toy
元素:
$toy = $item.SelectSingleNode("//*[@name='toy']")
因为PowerShell是尝试是有益的,并露出name
属性作为对象上的属性,我们将需要使用属性访问器的实际标签Name
属性:
$toy.get_Name()
答
这里是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()
答
这里的另一种方式来获得所需的信息:
$item.model.PriceData.Item | ? name -eq toy