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