在Nant脚本中使用xmlpeek会产生奇怪的错误

时间:2012-03-20 20:05:27

标签: nant

作为CI过程的一部分,我正在尝试创建一个buildlabel,它包含xml结构中xml元素的内容。为此我使用nant和xmlpeek。我的问题是我得到一个奇怪的错误说明:

  

“Nodeindex'0'超出范围”

只有当我xmlpeeking的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>

,test1.xml文件如下所示:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <ProductVersion>9.0.21022</ProductVersion>
    </PropertyGroup>
</Project>

2 个答案:

答案 0 :(得分:5)

你已经给出了正确的提示。它是关于命名空间的。这应该解决它:

<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>

答案 1 :(得分:0)

在这里找到了类似的问题和问题:XmlPoke and unique nodes。问题是我没有在xmlpeek元素中包含命名空间定义,之后在我的xpath语句中省略了对命名空间的必要引用:

<xmlpeek file="C:\xxx\test1.xml" xpath="//x:Project/x:PropertyGroup/x:ProductVersion" property="element">
    <namespaces>
        <namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
    </namespaces>
</xmlpeek>