【问题标题】:Retrieving Value of an XElement where value is <![CDATA[12345]]>检索值为 <![CDATA[12345]]> 的 XElement 的值
【发布时间】:2014-08-03 11:29:40
【问题描述】:

如果我有以下 xml 元素:

 <TEST><![CDATA[12345]]></TEST>

我正在尝试使用以下代码提取 &lt;TEST&gt; xml 元素的值:

  XElement elem = documet.XPathSelectElement(xpath_to_TEST); //xpath_to_TEST is the actual xpath to that element
  var value = elem.value //value of <TEST>

上面代码的问题是value 变量包含12345,我想在其中获取&lt;TEST&gt; 的整个值作为字符串,包括像&lt;![CDATA[12345]]&gt; 这样的CDATA 标记。

这可能吗?

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 我相信如果您需要 CDATA 元素,您应该只挖掘子元素而不是要求价值。旁注:CDATA 只是表示节点值的一种方式,通常并不重要。示例代码stackoverflow.com/questions/1236785/…
  • @AlexeiLevenkov 我意识到逻辑是能够通过分解每个元素及其确切值来分解 XML 元素,以便以后用户可以通过不同的过程重建响应。我只需要能够获得给定 xml 元素的确切值,所以如果它有标记,那么我需要保留它,在这种情况下,CDATA 很重要,否则它会变成我从原始输入中丢失的数据。跨度>
  • 正如我所链接的,我相信您正在寻找类似DescendantNodes().OfType&lt;XCData&gt;()

标签: c# .net xml cdata


【解决方案1】:

尝试将元素内容视为XCData节点,例如:

XElement elem = documet.XPathSelectElement(xpath_to_TEST);
XCData xcdata = (XCData)elem.FirstNode;
Console.WriteLine(xcdata.ToString());
//above prints :
//<![CDATA[12345]]>

相关问题:How to do edit text content keeping it in a CDATA block?

【讨论】:

    猜你喜欢
    • 2017-05-24
    • 2013-08-14
    • 2014-02-23
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 2011-05-01
    相关资源
    最近更新 更多