鉴于这两个节点变体
$variable.path
和
$variable.path.'#text'
以及包含父节点和子节点的变量,我在查找单个解决方案以获取内部文本时遇到问题。
在第一个条件中,$variable.path.InnerXml
返回内部文本 C:\ OneA.txt 。
但是在第二种情况下,这不起作用,它返回一个[System.Xml.XmlElement]。 我可以使用$ variable.path.force并返回true,但我需要使用{{1}}或{{1}}来取回 C:\ OneB.txt 。
但是如果我在第一个条件下使用这些技术中的任何一个,它根本不会返回任何内容。是否有一些方法可以在两种情况下工作,或者是我唯一的选择,看看节点是否具有属性,如果是这样,使用一种方法,如果不使用另一种方法?我本来希望不需要将它分配给一个新的变量,但是对于这两个条件都没有一种方法可以成为最小条件的路径。
答案 0 :(得分:4)
在仅包含文本节点(无属性,无嵌套节点)的节点上使用点访问时,PowerShell会自动扩展该文本节点的值。但是,在第二个示例中,节点也有一个属性,因此不会发生自动扩展。
我建议避免使用点访问,而是将SelectSingleNode()
方法与XPath expression一起使用,以便始终获得节点对象:
$xml.SelectSingleNode('//Path').'#text'
但请注意,XPath表达式区分大小写,因此表达式//path
与节点<Path>
不匹配。