从XmlNode中删除CDATA标记

7

我有一个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 标签。 - Ehsan
有一个东西,它被传递给客户端。 - Niv
谁正在创建这个XML? - Ehsan
2
我不是哈利波特的粉丝,但看到J.K.罗琳的名字被拼错了,让我心碎。 - Nurp
2个回答

9

好的,如果您说的完全正确,那么它就很容易:

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

不幸的是,这并不完全是我所说的。它嵌套得更复杂,而且我尝试过的这段代码似乎也会删除其他重要部分。 - Niv
@Niv,你能分享更多的代码或给我们更多的信息吗?我认为这是字符串操作,但我不知道你需要什么样的具体操作。如果你有更多的信息,我可以帮忙。 - No Idea For Name
2
这最终起作用了,只需要微小的修改:我需要使用innerXML而不是innerText。谢谢! - Niv
1
cdata标签的存在是有充分的理由的,用于转义无效的XML字符:<、>、'、"和&。如果您选择使用这种方式,请使用类似于以下链接中所示的方法对这些字符进行转义:http://msdn.microsoft.com/en-us/library/system.security.securityelement.escape.aspx - dana

1
我建议您阅读整个XML并重写它。您可以像这样读取没有CDATA的值。
foreach (var child in doc.Root.Elements())
    {
         string name = child.Name;
         string value = child.Value
    }

2
有可能XML是由第三方提供的,需要进行清理。 - Carl Onager
删除CDATA的一个原因是libxml不处理CDATA。这将要求他将从第三方接收到的数据转换为可用或删除的格式。请参见gnome和CDATA。此外,Gnome和CDATA也是如此 - Michele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接