在Powershell中,如何访问仅包含文本的XML元素?

时间:2013-05-18 10:05:53

标签: xml powershell

在Windows Powershell中,我有一个XML文档,其中包含一个内容为文本的元素。当一个元素包含另一个元素(如下例中的$ x.a)时,它将作为元素公开,而仅文本子元素($ x.a.b)将作为字符串公开。

PS C:\> $x = [xml]"<a><b>Some Text</b></a>
PS C:\> $x.a -is [Xml.XmlElement]
True
PS C:\> $x.a.b -is [Xml.XmlElement]
False
PS C:\> $x.a.b -is [string]
True

我可以理解为什么这很方便,但我想将b作为XmlElement来访问。这是可能的,如果是的话,我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

尝试使用GetElementByTagName方法。例如:

$x.a.GetElementsByTagName("b")

#text
-----
Some Text

$x.a.GetElementsByTagName("b").gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
False    False    XmlElementList                           System.Xml.XmlNodeList


$x.a.GetElementsByTagName("b")[0].gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    XmlElement                               System.Xml.XmlLinkedNode

如果您愿意,可以使用xpath:

$x.a.SelectSingleNode("b")

#text
-----
Some Text

$x.a.SelectSingleNode("b").gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    XmlElement                               System.Xml.XmlLinkedNode