2016-05-16 75 views
2

我有一個MSBUILD項目文件,我正在嘗試簽出一些xml文件並更新版本元素,並且似乎無法讓我的生活工作。這似乎應該是一個簡單的解決方案,但我無法讓它工作。我有一個簡單的XML文件:使用MSBuild.ExtensionPack.Xml.XmlFile更新XML文件UpdateElement

<XmlPeek XmlInputPath="c:\myProfile.xml" 
    Query="DataSet/Profile/Version[../Product = &quot;ProductA&quot;]/text()"> 
    <Output TaskParameter="Result" ItemName="ProductVersion" /> 
</XmlPeek> 

我使用XmlPoke更新版本,所以我嘗試XMLFILE的UpdateElement從XMLFILE的類頁沒有運氣:

<?xml version="1.0" standalone="yes"?> 
<DataSet> 
    <Profile> 
    <Product>ProductA</Product> 
    <Version>1.2.3.4</Version> 
    </Profile> 
    ~ 
</DataSet> 

我可以用xmlPeek獲取版本

http://www.msbuildextensionpack.com/help/4.0.5.0/html/4009fe8c-73c1-154f-ee8c-e9fda7f5fd96.htm

<MSBuild.ExtensionPack.Xml.XmlFile 
    TaskAction="UpdateElement" 
    File="c:\machine.config" 
    XPath="/configuration/configSections/section[@name='system.data']" 
    InnerText="NewValue"/> 

我試過follwing加上馬其他沒有任何工作的XPath版本。

<MSBuild.ExtensionPack.Xml.XmlFile 
    TaskAction="UpdateElement" 
    File="c:\myProfile.xml" 
    XPath="/DataSet/Profile/Version[@Product='ProductA']" 
    InnerText="5.6.7.8" 
    /> 

我錯過了什麼?
還是沒有人知道xmlpoke

感謝

+0

確定正確的XPath需要關於相應XML的信息。你能否發佈包含目標元素的XML的相關部分? – har07

+0

我以爲我確實發佈了相關的xml部分,所以我假設你的意思是'xml版本'這一行 - 我添加到原始文章。 – Tom

+0

對不起,你是對的。 XML已經在帖子的頂部,我怎麼能錯過! – har07

回答

1

在XPath正確的XPath,@用來引用屬性像@attribute_name。所以,你的企圖的XPath Version[@Product='ProductA']的一部分,將尋找具有Product屬性值等於「產品A」,像以下(不你的XML存在)Version元素:

<Version Product="ProductA"/> 

正確的XPath獲得Version元素通過Product名稱將是如下:

/DataSet/Profile[Product='ProductA']/Version 

這種特殊的部分Profile[Product='ProductA'],過濾Profile元素有子元素Product等於「產品A」。

+0

非常感謝你。 – Tom