我正在尝试选择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
没有。
我想念什么明显的东西? :/
谢谢
答案 0 :(得分:2)
问题是您的XPath由于名称空间而无效。
但是,您可以滥用PowerShell的功能,只需访问print("view did load : MainViewController")
,就好像它是对象结构一样。
Token
您还可以使用$xmlNew.Project.ItemGroup.Token.outerxml
cmdlet并通过XPath显式指定命名空间,如this answer中所示。
Select-Xml