【发布时间】:2019-08-16 18:30:23
【问题描述】:
我有两个关于 XML 的问题...
-
给定一个这样的 XML 节点
<Product name="Dave">并分配给带有
SelectSingleNode的变量,$xmlNode.name将返回 Dave。但是,如果 XML 是<Product id="Dave">然后
$xmlNode.name将返回产品。由于“name”可以引用节点的属性,也可以引用节点本身的名称,这是否完全反对使用 Name 作为属性,最佳实践是在这里使用 ID 之类的东西?或者这真的不太可能是一个问题吗,m,如果名称更有意义,然后运行它?
-
给定一堆 Product 节点,以及这样的代码
$tempProducts = $temp.xml.SelectNodes('//Product')Write-Host "$($tempProducts.GetType())"会提示结果变量的类型是System.Xml.XPathNodeList,System.Xml,版本=4.0.0.0, 文化=中立,PublicKeyToken=b77a5c561934e089
然而,
[System.Xml.XPathNodeList]$tempProducts = $temp.xml.SelectNodes('//Product')会抛出一个错误,找不到类型 [System.Xml.XPathNodeList]。
这是因为我一直在一个大型脚本中输入我的变量,并认为它可能会节省一些调试时间。但是这一个条件似乎给我带来了麻烦。
有什么想法吗?
【问题讨论】:
-
如果您使用 XPath 来选择您的属性,那么您可以始终使用
.Name进行属性名称检索,并使用.Value来检索这些属性的文本值。如果您使用SelectNodes(),它将输出XmlNodeList类型。为什么要把它转换成别的东西? -
关于类型,我并没有尝试强制转换,我只是想故意用我会得到的类型输入变量。所以我使用 getType() 来确定我需要使用什么。似乎 GetType 是……错了?
-
我想我没有给你一个明确的答案。
$temp.xml.SelectNodes('//Product') -is [System.Xml.XmlNodeList]仍然返回 true,因为这是它的基本类型。
标签: xml powershell xpath