次の内容の 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 タグを保持したい。この問題にはいくつかの解決策があるはずです。
私が試した解決策の 1 つは、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 要素の内部テキスト要素を選択し、そのノードを変更できれば、最善の解決策になると思います。これを達成する方法はありますか?