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

2023-12-08

我正在尝试使用 XmlFile 扩展来删除 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>

这是我的 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,但看起来是一样的。它不会删除 ->

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


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

  2. The XML文件元素用于更新/删除元素内的属性:

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

由于您没有提到“名称”属性,它正在尝试删除文本值。您在 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”。

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 XPath 在 WIX 中删除具有 XmlConfig 扩展的 XML 元素 的相关文章

随机推荐