在Powershell中,如何访问仅包含文本的XML元素?
在Windows Powershell中,我有一个XML文档,其中包含一个内容为文本的元素。当一个元素包含另一个元素时,如下面示例中的$x.a,它将作为一个元素公开,而文本only child($x.a.b)将作为字符串公开在Powershell中,如何访问仅包含文本的XML元素?,xml,powershell,Xml,Powershell,在Windows Powershell中,我有一个XML文档,其中包含一个内容为文本的元素。当一个元素包含另一个元素时,如下面示例中的$x.a,它将作为一个元素公开,而文本only child($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 [Xm
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
PS C:\>$x=[xml]”一些文本
PS C:\>$x.a-是[Xml.xmlement]
真的
PS C:\>$x.a.b-是[Xml.xmlement]
假的
PS C:\>$x.a.b-是[字符串]
真的
我可以理解为什么这样做很方便,但我希望以XmlElement的形式访问b。这可能吗?如果可能,我该怎么做?尝试
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
我一直在寻找一种不同的方法来访问b,但这是可行的。如果唯一的方法是使用XmlDocument方法,那么
$x.a.selectSingleNode(“b”)
可能更干净/简洁。这仍然是一个很好的答案。我的答案包括selectSingleNode
。我在第一个答案后2分钟更新了它=)