作为CI过程的一部分,我正在尝试创建一个构建标记,它由xml结构中的xml元素的内容组成.为此我使用nant和xmlpeek.我的问题是我得到一个奇怪的错误说明:
"Nodeindex'0'超出范围"
仅当xml文件的xml文件在根节点中包含命名空间定义时才会出现这种情况.
从xml文件中删除命名空间可以获得我期望的输出.
生成错误的nant目标可以归结为:
<target name="TDSLabel">
<property name="element" value=""/>
<echo message="Getting element" />
<xmlpeek file="C:\xxx\test1.xml" xpath="//Project/PropertyGroup/ProductVersion" property="element"/>
<echo message="The found element value was: ${element}" />
</target>
Run Code Online (Sandbox Code Playgroud)
并且test1.xml文件如下所示:
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProductVersion>9.0.21022</ProductVersion>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
你已经给出了正确的提示.它是关于命名空间的.这应该解决它:
<target name="TDSLabel">
<property name="element" value=""/>
<echo message="Getting element" />
<xmlpeek
file="C:\xxx\test1.xml"
xpath="//x:Project/x:PropertyGroup/x:ProductVersion"
property="element"
verbose="true">
<namespaces>
<namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
</namespaces>
</xmlpeek>
<echo message="The found element value was: ${element}" />
</target>
Run Code Online (Sandbox Code Playgroud)