【发布时间】:2019-05-16 00:41:21
【问题描述】:
我正在尝试选择 xml 文件中的特定节点,以便将其与另一个文件中的同一节点进行比较。
我可以使用通用节点浏览文件,但我不知道如何获得准确的 Xpath。
这是 XML:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Domain wide values -->
<PropertyGroup>
<LoggingLevel>0</LoggingLevel>
<LongTimeouts>0</LongTimeouts>
</PropertyGroup>
<ItemGroup>
<!--AB-->
<Token Include="{AB_ANALYTICSSERVER}">
<Value>Test</Value>
</Token>
<Token Include="{AB_CERTFINDVALUE}">
<Value>$(CertName)</Value>
</Token>
<Token Include="{AB_SERVICECERTFINDVALUE}">
<Value>$(CertName)</Value>
</Token>
<Token Include="{AB_CONSUMERSGROUP}">
<Value>DLG-AB-users</Value>
</Token>
<!--AB End-->
<!--Database-->
<Token Include="{Database_Domain}">
<Value>$(Domain)</Value>
</Token>
<Token Include="{Audit_Domain}">
<Value>$(Domain)</Value>
</Token>
<!--Database End-->
</ItemGroup>
</Project>
但我显然在基于 xpath 的查询中遗漏了一些东西:
例如
$xmlNew.SelectNodes("/node()[1]/node()[3]/node()[2]").outerxml
返回:
<Token Include="{AB_ANALYTICSSERVER}" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><Value>Test</Value></Token>
但是这些都没有返回任何东西:
$xmlNew.SelectNodes("/Project/ItemGroup/Token").outerxml
$xmlnew.selectnodes('//token[contains(@Include,"{AB_ANALYTICSSERVER}")]').OuterXml
同样有效:
$xmlNew.SelectNodes("/node()[1]/node()[2]/node()[2]").outerxml
但这不是:
$xmlnew.selectnodes('/Project/PropertyGroup/LongTimeouts').outerxml 没有。
我缺少什么明显的东西? :/
谢谢
【问题讨论】:
-
Project元素上设置的默认命名空间。
标签: xml powershell