使用和不使用节点属性访问innerXML

时间:2018-01-30 21:47:32

标签: xml powershell xpath

鉴于这两个节点变体

$variable.path

$variable.path.'#text'

以及包含父节点和子节点的变量,我在查找单个解决方案以获取内部文本时遇到问题。

在第一个条件中,$variable.path.InnerXml返回内部文本 C:\ OneA.txt

但是在第二种情况下,这不起作用,它返回一个[System.Xml.XmlElement]。 我可以使用$ variable.path.force并返回true,但我需要使用{{1}}或{{1}}来取回 C:\ OneB.txt

但是如果我在第一个条件下使用这些技术中的任何一个,它根本不会返回任何内容。是否有一些方法可以在两种情况下工作,或者是我唯一的选择,看看节点是否具有属性,如果是这样,使用一种方法,如果不使用另一种方法?我本来希望不需要将它分配给一个新的变量,但是对于这两个条件都没有一种方法可以成为最小条件的路径。

1 个答案:

答案 0 :(得分:4)

在仅包含文本节点(无属性,无嵌套节点)的节点上使用点访问时,PowerShell会自动扩展该文本节点的值。但是,在第二个示例中,节点也有一个属性,因此不会发生自动扩展。

我建议避免使用点访问,而是将SelectSingleNode()方法与XPath expression一起使用,以便始终获得节点对象:

$xml.SelectSingleNode('//Path').'#text'

但请注意,XPath表达式区分大小写,因此表达式//path与节点<Path>不匹配。