2012-03-29 5 views
0

次のXMLを与える私は、XMLにLinqを使用してUpgradeImageとTargetImageのSourceFile属性をそれぞれ更新しようとしています。このXMLが形成される方法に問題があるのですか、まったく何か不足していますか?LINQ TO XML WIX PATCHファイルを更新

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
<PatchCreation 
    Id="224C316C-5894-4771-BABF-21A3AC1F75FF" 
    CleanWorkingFolder="yes" 
    OutputPath="patch.pcp" 
    WholeFilesOnly="yes"> 
<PatchInformation 
    Description="Update Patch" 
    Comments="Update Patch" 
    ShortNames="no" 
    Languages="1033" 
    Compressed="yes" 
    Manufacturer="me"/> 

<PatchMetadata 
    AllowRemoval="yes" 
    Description="Update Patch" 
    ManufacturerName="me" 
    TargetProductName="Update" 
    MoreInfoURL="http://andrewherrick.com/" 
    Classification="Update" 
    DisplayName="Update Patch"/> 

<Family DiskId="5000" 
    MediaSrcProp="Sample" 
    Name="Update" 
    SequenceStart="5000"> 
    <UpgradeImage SourceFile="c:\new.msi" Id="PatchUpgrade"> 
    <TargetImage SourceFile="c:\old.msi" Order="2" Id="PatchUpgrade" IgnoreMissingFiles="no" /> 
    </UpgradeImage> 
</Family> 

<PatchSequence PatchFamily="SamplePatchFamily" 
    Sequence="1.0.0.0" 
    Supersede="yes" /> 
</PatchCreation> 
</Wix> 
+1

私はWiXについて何も知らないが、あなたのコードを見なければ何が間違っていると言うのは難しい。 –

答えて

1

XNamespace ns = "http://schemas.microsoft.com/wix/2006/wi"; 

var doc = XDocument.Load(@"C:\test.xml"); 
var ui = doc.Elements(ns + "Wix").Elements(ns + "PatchCreation"). 
       Elements(ns + "Family").Elements(ns + "UpgradeImage").Single(); 

ui.Attribute("SourceFile").Value = "c:\newer.msi"; 

doc.Save(@"C:\test2.xml"); 

を照会するとき、私はあなたが名前空間を提供するのを忘れて推測している編集

代替が使用

XmlNamespaceManager mgr = new XmlNamespaceManager(new NameTable()); 
mgr.AddNamespace("ns", "http://schemas.microsoft.com/wix/2006/wi"); 
var el = doc.Root.XPathSelectElement("//ns:Wix/ns:PatchCreation/ns:Family/ns:UpgradeImage", mgr); 
el.Attribute("SourceFile").Value = @"c:\evennewer.msi"; 
1

XPathSelectElement拡張メソッドを使用することですthese xml extensions try、

XElement wix = XElement.Load("file"); 
wix.Set("PatchCreation/Family/UpgradeImage/SourceFile", "new file path", true) 
    .Set("TargetImage/SourceFile", "new file path", true); 

拡張機能が自動的に名前空間を取得します。 Set()は、属性が設定された要素のXElementを返します。したがって、2番目のSet()はUpgradeImage要素から開始します。