我正在尝试使用以下内容修改 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="<![CDATA[{[FEEDADDRESS]}]]>"
但无济于事。在这种情况下,扩展程序会引发错误。
然后我尝试添加包含 CDATA 标记的虚拟属性,如下所示:
<Property Id="CDATASTART"><![CDATA[<![CDATA[]]></Property>
<Property Id="CDATAMID"><![CDATA[]]]]></Property>
<Property Id="CDATAEND"><![CDATA[>]]></Property>
然后我将它们添加到值中:
Value="{[CDATASTART]}{[FEEDADDRESS]}{[CDATAMID]}{[CDATAEND]}"
但这会产生以下字符串:
<![CDATA[http://host.tld]]>
不知何故,扩展用它们的 XML 实体替换了小于和大于符号。
所以我想最好的解决方案是如果我可以使用XPath表达式选择 CDATA 元素的内部文本元素,然后修改该节点。有没有办法做到这一点?