我正在尝试使用XmlFile扩展来删除XML文件中的条目,这一点要准确:<Element name ="Somename"attribute2 ="whatever"provider-name ="whatever2"type ="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>
Run Code Online (Sandbox Code Playgroud)
这是我的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>
Run Code Online (Sandbox Code Playgroud)
当我运行安装程序时,它会重写file.xml,但它看起来是一样的.它不会删除 - > <Element name ="Somename"attribute2 ="whatever"provider-name ="whatever2"type ="DotNet">
我究竟做错了什么?构建时我没有遇到任何错误,也许我的xpath错了?
要删除XML元素,您需要使用XMLConfig元素
所述XMLFIile元素被用来更新/删除的元素中的属性:
deleteValue - 从ElementPath中指定的元素中删除值.如果指定了Name,则删除具有该名称的属性.如果未指定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" />
Run Code Online (Sandbox Code Playgroud)
在上面的脚本中,您需要使用xml文件的ID更新"#filename".
希望这可以帮助!