【发布时间】:2014-04-28 13:23:49
【问题描述】:
我有一个具有以下结构的 xml:
<rootNode>
<category name="test1">
<string name="n1">n1</string>
<string name="n2"><![CDATA[n2]]></string>
<string name="n3"><<n3</string>
</category>
<category name="test2">
<string name="n111">n111</string>
<string name="n2"><![CDATA[<<n2]]></string>
<string name="n3 &">
<![CDATA[n3
multiline]]>
</string>
</category>
rootNode 有多个 category 节点,有多个“字符串”节点。需要使所有节点CDATA。我所有的尝试都失败了,特别是因为来自“test2”的节点(更改 node.InnerText,用 string.Replace 解析文本等)
预期结果:
<rootNode>
<category name="test1">
<string name="n1"><![CDATA[n1]]></string>
<string name="n2"><![CDATA[n2]]></string>
<string name="n3"><![CDATA[<<n3]]></string>
</category>
<category name="test2">
<string name="n111"><![CDATA[n111]]></string>
<string name="n2"><![CDATA[<<n2]]></string>
<string name="n3 &">
<![CDATA[n3
multiline]]>
</string>
</category>
【问题讨论】:
-
你试过什么?你用的是什么解析器?
-
在尝试更改 InnerText 时,我使用了 XmlDocument(问题是输出 xml 有
<![CDATA[n1]]> ) .还尝试了 System.IO.File.ReadAllText + String.Replace (问题在于多行 cdata,现有 cdata 中的“<”需要保持不变,属性名称中的“&”需要保持不变) -
如果您有更多信息,请编辑您的问题。包括您目前使用的代码。
-
经过更多挖掘,我通过清除 InnerText 并添加一个新的 CData 部分来解决它。回复下面的答案。无论如何,谢谢,gunr2171!
-
很好的例子说明了为什么你不应该尝试在 XML 上进行任意搜索替换而不注意 XML 规范和内容。