0

我正在尝试使用以下内容修改 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 元素的内部文本元素,然后修改该节点。有没有办法做到这一点?

4

0 回答 0