修改 XElement 值会丢失 CData 类型

发布于 2024-10-11 04:45:52 字数 269 浏览 5 评论 0原文

我有一个包含一些 CData 节点的 XML 文件。但是当我尝试就地修改它们时:

var doc = XDocument.Load(filename);
foreach(var el in doc.Descendants("foo"))
{
    el.Value = el.Value.Replace("bar", "baz");
}
doc.Save(filename);

...它们都丢失了 CData 类型。避免这种情况的最佳方法是什么?谢谢!

I've got an XML file with some CData nodes. But when I try and modify them in situ:

var doc = XDocument.Load(filename);
foreach(var el in doc.Descendants("foo"))
{
    el.Value = el.Value.Replace("bar", "baz");
}
doc.Save(filename);

...they all lose their CData types. What's the best way of avoiding that? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

Bonjour°[大白 2024-10-18 04:45:52

从 XML 的角度来看,CData 和纯文本节点是等效的。因此,您看到的行为是预期的 - Value 永远不会创建 CDATA 节点,因为从 XML 的角度来看不需要它。

如果您必须拥有 CData,则需要显式创建一个。请参阅 http://msdn.microsoft.com/en-例如,us/library/system.xml.xmldocument.createcdatasection.aspx

CData and plain text nodes are equialent from XML point of view. So the behavior you see is expected - Value never creates CDATA nodes as there is no need for it from XML point of view.

If you must have CData you need to explicitly create one. See http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.createcdatasection.aspx for an exaple.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文