XML“name”属性,以及带有SelectNodes的XML变量类型

XML“name”属性,以及带有SelectNodes的XML变量类型,xml,powershell,xpath,Xml,Powershell,Xpath,我有两个关于XML的问题 给定这样一个XML节点 <Product name="Dave"> $tempProducts = $temp.xml.SelectNodes('//Product') 然后$xmlNode.name将返回产品 既然name'可以引用节点的属性,或者节点本身的名称,那么这是否就完全反对使用name作为属性,而最佳实践是使用ID之类的东西?或者这真的不太可能成为一个问题,m,如果名称更有意义,那么就用它运行吧 给定一组产品节点,代码如下 <Produ

我有两个关于XML的问题

给定这样一个XML节点

<Product name="Dave">
$tempProducts = $temp.xml.SelectNodes('//Product')
然后$xmlNode.name将返回产品

既然name'可以引用节点的属性,或者节点本身的名称,那么这是否就完全反对使用name作为属性,而最佳实践是使用ID之类的东西?或者这真的不太可能成为一个问题,m,如果名称更有意义,那么就用它运行吧

给定一组产品节点,代码如下

<Product name="Dave">
$tempProducts = $temp.xml.SelectNodes('//Product')
写入主机$$tempProducts.GetType将建议结果变量的类型为

System.Xml.XPathNodeList,System.Xml,版本=4.0.0.0, 文化=中性,PublicKeyToken=b77a5c561934e089

然而,[System.Xml.XPathNodeList]$tempProducts=$temp.Xml.SelectNodes'//Product'将抛出一个错误

找不到类型[System.Xml.XPathNodeList]

这是因为我一直在一个大脚本中输入变量,以为这样可以节省一些调试时间。但这一情况似乎给我带来了麻烦

有什么想法吗?

Re 1:

PowerShell通过将XML元素的子节点及其属性作为常规对象属性进行呈现,从而为XML元素的方便性进行了调整

这通常使在PowerShell中使用XML非常方便,但也有其缺陷:

如果与基础类型的属性存在命名冲突,则调整的属性优先

示例XML中的Name属性发生了这种情况:PowerShell将其作为.Name属性公开,该属性隐藏了报告标记名的XMlElement的.Name属性

一个简单的解决方法是调用属性访问器方法.get_Name以获取隐藏的XmlElement属性:

$node = ([xml] '<xml><Product Name="Dave" /></xml>').SelectSingleNode('//Product')

$node.Name       # adapted property: Name *attribute* -> 'Dave'
$node.get_Name() # native property: tag name -> 'Product'
上述收益率:

System.Xml.XPathNodeList System.Xml.XmlNodeList 系统对象
如果使用XPath选择属性,则可以一致地使用.Name进行属性名称检索,使用.Value进行这些属性的文本值检索。如果您使用的是SelectNodes,它将输出XmlNodeList类型。为什么要将它转换为其他类型呢?关于类型,我没有尝试转换,我只是想用我将得到的内容有意地输入变量。所以我使用getType来确定我需要使用什么。似乎GetType是。。。这里怎么了?我想我没有一个明确的答案给你$temp.xml.SelectNodes'//Product'-is[System.xml.XmlNodeList]仍然返回true,因为这是它的基本类型。