2014-03-26 59 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