2012-03-20 52 views
6

作爲CI過程的一部分,我嘗試創建一個構建標籤,該標籤由xml結構中的xml元素的內容組成。爲此我使用nant和xmlpeek。我的問題是,我得到一個奇怪的錯誤,指出:在Nant腳本中使用xmlpeek會產生奇怪的錯誤

「Nodeindex‘0’是超出範圍」

這只是個案如果XML文件我xmlpeeking包含在一個命名空間定義根節點。

從xml文件中刪除命名空間給了我期望的輸出。

生成錯誤可以boild下來的惡性目標:

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

回答

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

如前所述下同問題使用xmlpoke時可能會出現(HTTP:/ /stackoverflow.com/questions/2584766/nant-xmlpoke-and-unique-nodes)。奇怪的是我沒有得到任何谷歌命中直接在errormessage與xmlpeek或nant結合。感謝您的回答,現在其他人可能不會陷入那種奇怪的錯誤消息 – VilladsR 2012-03-21 21:59:22

0

發現類似的問題和anwser我的問題就在這裏: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>