Powershell: select XML 节点值按元素索引放入变量
Powershell: select XML node value into variable by element index
我有这个 PowerShell 脚本,我用它来解析 XML 文件的不同方面。因此,我想检索特定 XML 节点的值并将其保存到变量中。我想要 select 的这个节点在 XML 文件中存在多次,因此我需要能够提及我想要检索的节点的具体编号。
XML-文件:
<lvl1>
<lvl2>
<lvl3>
<lvl4>test1</lvl4>
<lvl4>test2</lvl4>
<lvl4>test3</lvl4>
</lvl3>
</lvl2>
</lvl1>
我尝试过的 Powershell 脚本:
1 无返回且无错误
[xml] $response = get-content "FilePath\Resp.xml"
[string] $Var = $response.SelectSingleNode('lvl1/lvl2/lvl3/lvl4[2]').InnerText
2 返回错误:"cannot index into a null array."
[xml] $response = get-content "FilePath\Resp.xml"
$Var = $response.lvl1.lvl2.lvl3.lvl4[2].'#text'
BACON 基本上提供了对问题的评论中的关键指针:
直接使用PowerShell的点符号n returns叶子元素的文本内容(只有文本子节点的元素), 所以 不需要 '.#text'
:
# Note: `.lvl4` is an *array* provided by PowerShell, so the index is
# 0-based. Therefore, [2] retrieves the *3rd* element.
$response.lvl1.lvl2.lvl3.lvl4[2] # -> 'test3'
请注意,PowerShell 将多个 lvl4
元素公开为一个 数组 ,因此 索引 到该数组是 0
-based.
您的基于 XPath 的命令应该按原样工作,但请注意,XPath 中的 索引是基于 1
的 ,因此 [2]
将引用 2nd 元素:
$response.SelectSingleNode('lvl1/lvl2/lvl3/lvl4[2]').InnerText # -> 'test2'
# Equivalent commands:
$response.SelectSingleNode('lvl1/lvl2/lvl3/lvl4[2]').'#text'
$response.SelectSingleNode('lvl1/lvl2/lvl3/lvl4[2]/text()').Value
我有这个 PowerShell 脚本,我用它来解析 XML 文件的不同方面。因此,我想检索特定 XML 节点的值并将其保存到变量中。我想要 select 的这个节点在 XML 文件中存在多次,因此我需要能够提及我想要检索的节点的具体编号。
XML-文件:
<lvl1>
<lvl2>
<lvl3>
<lvl4>test1</lvl4>
<lvl4>test2</lvl4>
<lvl4>test3</lvl4>
</lvl3>
</lvl2>
</lvl1>
我尝试过的 Powershell 脚本:
1 无返回且无错误
[xml] $response = get-content "FilePath\Resp.xml"
[string] $Var = $response.SelectSingleNode('lvl1/lvl2/lvl3/lvl4[2]').InnerText
2 返回错误:"cannot index into a null array."
[xml] $response = get-content "FilePath\Resp.xml"
$Var = $response.lvl1.lvl2.lvl3.lvl4[2].'#text'
BACON 基本上提供了对问题的评论中的关键指针:
直接使用PowerShell的点符号n returns叶子元素的文本内容(只有文本子节点的元素), 所以 不需要 '.#text'
:
# Note: `.lvl4` is an *array* provided by PowerShell, so the index is
# 0-based. Therefore, [2] retrieves the *3rd* element.
$response.lvl1.lvl2.lvl3.lvl4[2] # -> 'test3'
请注意,PowerShell 将多个 lvl4
元素公开为一个 数组 ,因此 索引 到该数组是 0
-based.
您的基于 XPath 的命令应该按原样工作,但请注意,XPath 中的 索引是基于 1
的 ,因此 [2]
将引用 2nd 元素:
$response.SelectSingleNode('lvl1/lvl2/lvl3/lvl4[2]').InnerText # -> 'test2'
# Equivalent commands:
$response.SelectSingleNode('lvl1/lvl2/lvl3/lvl4[2]').'#text'
$response.SelectSingleNode('lvl1/lvl2/lvl3/lvl4[2]/text()').Value