2014-03-26 57 views
3

我想使用XmlFile擴展刪除XML文件中的條目,這一個是精確的:<元素名稱=「Somename」attribute2 =「無論」提供者名稱= 「whatever2」 TYPE = 「DOTNET的」>使用XPath在WIX中使用XmlConfig擴展刪除XML元素

這裏是我的XML文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Elements> 
    <Element name="Somename" attribute2="whatever" provider-name="whatever2" type="DotNet"></Element> 
    <Element name="Somename2" attribute2="whatever" provider-name="whatever2" type="DotNet"></Element> 
</Elements> 

這裏是我的維克斯代碼

<Feature Id='Config' Level='1'> 
     <Component KeyPath="yes" Id="UpdateConfig" Guid="{xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" Directory="MyCommonAppDataFolders"> 
        <util:XmlConfig Action="delete" Id="RemoveAnElement" Node="element" File="path\to\my\file.xml" VerifyPath='/Elements/Element[\[]@name=\"Somename"[\]]' ElementPath="/Elements/Element" Sequence="1" /> 
     </Component> 
     <Condition Level="1">FILEEXISTS</Condition> 
    </Feature>  

當我運行安裝程序時,它會重寫file.xml,但它看起來是一樣的。它不會刪除 - > <元素名稱=「Somename」屬性2 =「無論」提供者名稱=「whatever2」類型=「DotNet」>

我做錯了什麼?我在構建時沒有遇到任何錯誤,也許我的xpath是錯誤的?

+0

我想你的xpath中有一些額外的括號。你可以試試這個:'// Element \ [@ name ='Somename'\]「' – deanosaur

+0

@deanosaur nope,這就是wix如何逃脫brachets –

回答

6
  1. 要刪除XML元素,你需要利用的XMLConfig Element

  2. XMLFIile Element用於更新/元素中刪除屬性:

    deleteValue - 從刪除的值元素路徑中指定的元素。如果指定了名稱,則刪除具有該名稱的屬性。如果未指定Name,則刪除ElementPath中指定的元素的文本值。如果deleteValue是指定的操作,那麼Value屬性將被忽略。

既然你沒有提到的「名稱」屬性,它試圖刪除文本值。您在ELEMENT中沒有文本值,因此即使在編輯之後,您的文件也保持不變。

UPDATE:與維克斯腳本

<util:XmlConfig Id='SetXMlfiletest' 
       File='[#filename]' 
       Action='delete' 
       Node='element' 
       ElementPath="/Elements" 
       On='install' 
       PreserveModifiedDate='yes' 
       VerifyPath="/Elements/Element[\[]@name='Somename'[\]]" 
       Sequence="1" /> 

在上面的腳本更新的答案,你需要更新「#filename」與您的xml文件的ID。

希望這會有所幫助!

+0

謝謝,我更新了我的代碼,但仍然有問題刪除元素 –

+0

已更新答案,檢查出來。 – Isaiah4110