如何使用XmlFile元素修改WiX中的CDATA节点?

时间:2013-09-12 12:17:48

标签: xml wix cdata wix-extension

我正在尝试使用以下内容修改XML配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <applicationSettings>
        <App.Properties.Settings>
            <setting name="FeedAddress" serializeAs="String">
                <value><![CDATA[http://feedaddress.tld]]></value>
            </setting>
        </App.Properties.Settings>
    </applicationSettings>
</configuration>

使用此XmlFile元素:

<util:XmlFile
    Id="SetFeedAddress"
    Action="setValue"
    ElementPath="//configuration/applicationSettings/App.Properties.Settings/setting[\[]@name='FeedAddress'[\]]/value"
    File="[INSTALLFOLDER]App.exe.config"
    SelectionLanguage="XPath"
    Value="{[FEEDADDRESS]}"
    Sequence="4"/>

但结果是CDATA标签被删除并被文本替换。我想保留CDATA标签。我想这个问题应该有几个解决方案。

我尝试过的一个解决方案是修改XmlFile元素以包含CDATA标记,如下所示:

Value="&lt;![CDATA[{[FEEDADDRESS]}]]&gt;"

但无济于事。在这种情况下,扩展会引发错误。

然后我尝试添加包含CDATA标签的虚拟属性,如下所示:

<Property Id="CDATASTART"><![CDATA[<![CDATA[]]></Property>
<Property Id="CDATAMID"><![CDATA[]]]]></Property>
<Property Id="CDATAEND"><![CDATA[>]]></Property>

然后我将它们添加到值:

Value="{[CDATASTART]}{[FEEDADDRESS]}{[CDATAMID]}{[CDATAEND]}"

但这导致以下字符串:

&lt;![CDATA[http://host.tld]]&gt;

不知何故,扩展程序将小于大于的符号替换为XML实体。

所以我想最好的解决方案是,如果我可以用XPath表达式选择CDATA元素的内部文本元素,然后修改该节点。有没有办法实现这个目标?

0 个答案:

没有答案