【问题标题】:Removing CDATA tag from XmlNode从 XmlNode 中删除 CDATA 标记
【发布时间】:2013-08-05 05:57:55
【问题描述】:

我有一个XmlNode,它代表以下 xml,例如:

XmlNode xml.innerText =
<book>
<name><![CDATA[Harry Potter]]</name>
<author><![CDATA[J.K. Rolling]]</author>
</book>

我想更改此节点,使其包含以下内容:

XmlNode xml.innerText =
<book>
<name>Harry Potter</name>
<author>J.K. Rolling</author>
</book>

有什么想法吗?
谢谢!

【问题讨论】:

  • 他们是否特别需要删除标签,或者您只是想读取值?顺便说一句,总是发布正确的样本。您在示例 xml 中缺少关闭 cdata 标记。
  • 有,传给客户端
  • 谁在创建 xml?
  • 我不是哈利波特迷,但看到 J.K.罗琳的名字拼错让我心碎。

标签: c# xmldocument cdata xmlnode


【解决方案1】:

好吧,如果这正是你所说的,那就简单了:

xml.innerText = xml.innerText.Replace("![CDATA[","").Replace("]]","");
xmlDoc.Save();// xmlDoc is your xml document

【讨论】:

  • 不幸的是,这不是我所说的那样。它的嵌套更复杂,并且这段代码(我已经尝试过)似乎也删除了其他主要部分
  • @Niv 你能分享更多你的代码或给我们更多信息吗?我认为这是您想要的字符串操作,但我不知道您需要什么确切的操作。如果您有更多信息,我可以提供帮助
  • 这结束了工作,只需稍作修改:我需要使用 innerXML 而不是 innerText。 Tnx!
  • 存在 cdata 标记是有充分理由的,以转义无效的 xml 字符:、'、" 和 &。如果你走这条路,你应该使用类似这样的东西来转义这些字符: msdn.microsoft.com/en-us/library/…
【解决方案2】:

我建议您阅读整个 xml 并重写它。您可以像这样读取没有 cdata 的值

foreach (var child in doc.Root.Elements())
    {
         string name = child.Name;
         string value = child.Value
    }

【讨论】:

  • XML 可能是第三方提供的,需要清理一下。
  • 删除 CDATA 的一个原因是 libxml 不处理 CDATA。这将要求他获取从第三方收到的数据,并使其成为可以使用或删除的格式。见gnome and CDATA。另外,Gnome and CDATA also.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多