在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来访问。这是可能的,如果是的话,我怎么能这样做?
答案 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