Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XPath在WIX中删除扩展名为XmlConfig的XML元素_Xml_Xpath_Wix - Fatal编程技术网

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

使用XPath在WIX中删除扩展名为XmlConfig的XML元素,xml,xpath,wix,Xml,Xpath,Wix,我试图使用XmlFile扩展名删除XML文件中的条目,确切地说,这是一个: 这是我的XML文件 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Elements> <Element name="Somename" attribute2="whatever" provider-name="whatever2" type="DotNet"></Element> <E

我试图使用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>
<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>      

这是我的Wix代码

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

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

  • 要删除XML元素,您需要使用

  • 用于更新/删除元素中的属性:

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

  • 因为您没有提到“Name”属性,所以它正在尝试删除文本值。元素中没有文本值,因此即使在编辑后文件也保持不变

    更新:用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”


    希望这有帮助

    我认为xpath中有一些额外的括号。你能试试这个:
    //Element\[@name='Somename'\]“
    @deanosar不,这就是wix逃逸的原因。我更新了我的代码,但删除元素时仍然有问题。你好,这个问题解决了吗?有类似的问题吗