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

在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

在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 [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分钟更新了它=)