阅读 xml 文件以及如何使用 powershell 修改逻辑操作
Read xml file and how to modify logical operations using powershell
$xml = [xml] @'
<?xml version="1.0" encoding="UTF-8"?>
<group>
<product description="phone" id="1234/5678">
<item name="apple" version="50" />
<item name="banana" version="100" />
</product>
<product description="notebook" id="6666/7777">
<item name="orange" version="150" />
</product>
</group>
'@
$xml.group.product[0].item[0].name
有效 (returns 'apple'
),因为第一个 product
元素有 2 item
子元素。
然而,$xml.group.product[1].item[0].name
不起作用(returns$null
),因为只有一个 item
元素.
如何才能可靠地访问第一个 item
子元素,而不必知道它是否恰好是唯一的?
您的示例 xml 不太有效,因此我将使用稍微修改过的版本:
$xml = [xml] @"
<?xml version="1.0" encoding="UTF-8"?>
<group>
<product description="phone" id="1234/5678">
<item name="apple" version="50" />
<item name="banana" version="100" />
</product>
<product description="notebook" id="6666/7777">
<item name="orange" version="150" />
</product>
</group>
"@
在您的场景中,有一个名为 Member Enumeration 的 PowerShell 功能适用于您的第一个 product
节点和 returns 所有节点的 array子 item
节点,但对于第二个 product
节点,它只是 returns item
节点本身:
PS> $xml.group.product[0].item.GetType().FullName
System.Object[]
PS> $xml.group.product[1].item.GetType().FullName
System.Xml.XmlElement
因此,您可以从第一个 product
节点索引到数组,但不能从第二个节点索引到 XmlElement,这给出了您所看到的行为。
要解决此问题,您可以将 item
节点强制放入一个数组中,这样即使只有一个 item
:
也可以对其进行索引
PS> @($xml.group.product[0].item).GetType().FullName
System.Object[]
PS> @($xml.group.product[1].item).GetType().FullName
System.Object[]
PS> @($xml.group.product[1].item)[0].name
orange
$xml = [xml] @'
<?xml version="1.0" encoding="UTF-8"?>
<group>
<product description="phone" id="1234/5678">
<item name="apple" version="50" />
<item name="banana" version="100" />
</product>
<product description="notebook" id="6666/7777">
<item name="orange" version="150" />
</product>
</group>
'@
$xml.group.product[0].item[0].name
有效 (returns 'apple'
),因为第一个 product
元素有 2 item
子元素。
然而,$xml.group.product[1].item[0].name
不起作用(returns$null
),因为只有一个 item
元素.
如何才能可靠地访问第一个 item
子元素,而不必知道它是否恰好是唯一的?
您的示例 xml 不太有效,因此我将使用稍微修改过的版本:
$xml = [xml] @"
<?xml version="1.0" encoding="UTF-8"?>
<group>
<product description="phone" id="1234/5678">
<item name="apple" version="50" />
<item name="banana" version="100" />
</product>
<product description="notebook" id="6666/7777">
<item name="orange" version="150" />
</product>
</group>
"@
在您的场景中,有一个名为 Member Enumeration 的 PowerShell 功能适用于您的第一个 product
节点和 returns 所有节点的 array子 item
节点,但对于第二个 product
节点,它只是 returns item
节点本身:
PS> $xml.group.product[0].item.GetType().FullName
System.Object[]
PS> $xml.group.product[1].item.GetType().FullName
System.Xml.XmlElement
因此,您可以从第一个 product
节点索引到数组,但不能从第二个节点索引到 XmlElement,这给出了您所看到的行为。
要解决此问题,您可以将 item
节点强制放入一个数组中,这样即使只有一个 item
:
PS> @($xml.group.product[0].item).GetType().FullName
System.Object[]
PS> @($xml.group.product[1].item).GetType().FullName
System.Object[]
PS> @($xml.group.product[1].item)[0].name
orange