使用XPath在WIX中删除带有XmlConfig扩展名的XML元素

时间:2014-03-26 15:20:31

标签: xml xpath wix

我试图使用XmlFile扩展来删除XML文件中的条目,这个是准确的:<元素名称=" Somename" attribute2 ="无论"提供商名称=" whatever2"类型=" DOTNET的">

这是我的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>

这是我的Wix代码

<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,但它看起来是一样的。它不会删除 - &gt; &LT;元素名称=&#34; Somename&#34; attribute2 =&#34;无论&#34;提供商名称=&#34; whatever2&#34;类型=&#34; DOTNET的&#34;&GT;

我做错了什么?我在构建时没有遇到任何错误,也许我的xpath错了?

1 个答案:

答案 0 :(得分:6)

  1. 要删除XML元素,您需要使用XMLConfig Element

  2. XMLFIile Element用于更新/删除元素中的属性:

      

    deleteValue -   从ElementPath中指定的元素中删除值。如果指定了Name,则删除具有该名称的属性。如果未指定Name,则删除ElementPath中指定的元素的文本值。如果deleteValue是指定的操作,则忽略Value属性。

  3. 由于您尚未提及“名称”属性,因此它尝试删除文本值。您在ELEMENT中没有文本值,因此即使在编辑之后您的文件也保持不变。

    更新:使用WIX脚本更新了答案

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

    在上面的脚本中,您需要使用xml文件的ID更新“#filename”。

    希望这有帮助!