我正在尝试解析我的 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/