2016-05-16 14 views
2

私はMSBUILDプロジェクトファイルを持っていますが、いくつかのXMLファイルをチェックアウトしてバージョン要素を更新しようとしています。これは単純な解決策でなければならないようですが、私はそれを働かせることはできません。私はxmlPeekを使用してバージョンを取得することができますMSBuild.ExtensionPack.Xml.XmlFileを使用してXMLファイルを更新するUpdateElement

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

:私は、単純なXMLファイルを持っている

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

私はバージョンを更新XmlPokeを使用して運がなかったので、私はXMLFILEのクラスページからXMLFILEのUpdateElementを試してみました:

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

感謝のXPathで

+0

正しいXPathを決定するには、対応するXMLに関する情報が必要です。ターゲット要素を含むXMLの関連部分を投稿してください。 – har07

+0

私は関連するxml部分を投稿したと思ったので、あなたは 'xml version'の行を意味すると仮定しています - 元の投稿に追加しました。 – Tom

+0

申し訳ありませんが、あなたは正しいです。 XMLがすでに投稿の上にあったので、どうすればそれを逃すことができますか? – har07

答えて

1

のための正しいXPathを知っているんが、@@attribute_nameのような属性を参照するために使用されます。取得する

<Version Product="ProductA"/> 

正しいのXPath:だからあなたが試みたXPath Version[@Product='ProductA']の一部は、Product属性値が「ProductA」、(あなたのXMLには存在しない)、次のようなものに等しく持ってVersion要素を探しますProduct名前でVersion要素は以下のようになります:

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

この特定の部分Profile[Product='ProductA']は、子要素Productが「ProductA」を等しく持ってProfile要素をフィルタリングします。

+0

ありがとうございました...ありがとうございました。 – Tom

関連する問題