linq - 在 C# 中从 XML 解析 CData

标签 linq c#-4.0 cdata

我正在尝试解析我的 xml,其中 CData 标记作为其节点之一的值。我的 XML 结构如下。

<node1>
<node2>
<![CDATA[ <!--@@@BREAK TYPE="TABLE" @@@--> <P><CENTER>... html goes here.. ]]>
</node2>
</node1>

我的代码如下。当我解析时,我得到带有 CData 标记的响应,而不是 CData 标记中的值。你能帮我解决我的问题吗?

XDocument xmlDoc = XDocument.Parse(responseString);
XElement node1Element = xmlDoc.Descendants("node1").FirstOrDefault();
string cdataValue = node1Element.Element("node2").Value;

Actual Output: <![CDATA[ <!--@@@BREAK TYPE="TABLE" @@@--> <P><CENTER>... html goes here.. ]]>

Expected Output:  <!--@@@BREAK TYPE="TABLE" @@@--> <P><CENTER>... html goes here..

我不确定是否 System.XML.Linq.XDocument 导致了该问题。所以我尝试了如下的 XMLDocument 版本。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(responseString);
XmlNode node = xmlDoc.DocumentElement.SelectSingleNode(@"/node1/node2");
XmlNode childNode = node.ChildNodes[0];
if (childNode is XmlCDataSection)
{}

我的 if 循环返回 false。看起来我的 xml 有问题,它实际上不是有效的 CData?请帮我解决问题。 如果您需要更多详细信息,请告诉我。

最佳答案

你所描述的事情永远不会真正发生。获取包含 cdata 作为子节点的节点的 Value 将为您提供 cdata 的内容(内部文本)。您应该已经获得了预期的输出。

获取实际 cdata 节点的唯一方法是实际获取 cdata 节点。

var cdata = node1Element.Element("node2").FirstNode;

关于linq - 在 C# 中从 XML 解析 CData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39027845/

相关文章:

c# - 动态对象 - 整洁的属性名称?

python - LXML 杀死了我的 CDATA 部分

xml - Delphi 和 XML CDATA

c# - 这个 LINQ 表达式可以从方法语法转换为查询语法吗?

c# - 我如何暗示链接方法的代码契约以避免链接时的多余检查?

List<T>.<some action>(objT) 的 C# OnAdd/OnRemove/OnModified 事件

javascript - 在 javascript 变量中存储 HTML 或 XML 代码

c# - 为每个 ID 选择具有最大日期的值

c# - LINQ Left Outer Join 结合 Let

c# - 更改 LINQ 对象数据上下文