2012-03-20 2 views
6

В рамках процесса CI я пытаюсь создать метку build, состоящую из содержимого элемента xml в структуре xml. Для этого я использую nant и xmlpeek. Моя проблема заключается в том, что я получаю странное сообщение об ошибке с указанием:Использование xmlpeek в сценарии Nant дает нечетную ошибку

«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). Странно, что я не получал никаких хитов google непосредственно в errormessage, в сочетании с ни xmlpeek, ни nant. Спасибо за ваш ответ, теперь другие люди могут не застрять в этом нечетном нарушении – VilladsR

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> 
Смежные вопросы