【问题标题】:Read cdata and html inside a tag by linqToXml通过 linqToXml 读取标签内的 cdata 和 html
【发布时间】:2014-10-11 04:35:06
【问题描述】:

我想摆脱 CDATA,我想读取 br 标签。 这是我的 xml:

<body>
<![CDATA[
Apple iPhone är mycket mer än en mobil. Den är en kombination av tre enheter: en       revolutionerande mobiltelefon, en iPod i widescreenformat och en banbrytande Internetenhet.  Allt detta och mer därtill gör den till den bästa mobiltelefon du kan föreställa dig.
]]>
<br/>
<![CDATA[
Med de maskinvarufunktionerna i iPhone i kombination med världens mest avancerade   mobiloperativsystem öppnar Apple möjligheter för vad en mobiltelefon kan göra. Programmen   är helt integrerade med varandra och kan synkroniseras med din dator - oavsett om du   använder Mac eller PC. Från Multi-Touch-skärmen till det smarta tangentbordet och   sensorerna.
]]>
<br/>
</body>

这是我的代码:

 public static List<string> GetDescriptionXml(string idItem)
    {
        Dictionary<string, string> dic = new Dictionary<string, string>();
        XDocument xdoc = XDocument.Load(GetDescription(idItem));
        return (from doc in xdoc.Elements("body") select doc.Value).ToList();
    }

当我运行它时,我只是在没有 br 标签的情况下获得了 CDATA 中的值! 我也可以得到 br 标签吗?

【问题讨论】:

  • doc.value 仅返回 xml 元素内的内容(文本)。
    不是内容,而是一个 empty xml 元素(即,它不包含任何内容)。如果你需要 cdata 值和
    ,你可以使用简单的字符串替换来摆脱&lt;![CDATA[...]]&gt;

标签: c# html xml linq


【解决方案1】:

最终的解决方案取决于您的 HTML 可能包含的所有可能情况。这是一种可能的解决方案:

.....
return (from doc in xdoc.Elements("body")
        select string.Join(Environment.NewLine,
                           doc.Nodes()
                              .Select(o =>
                                      {
                                        if (o is XCData) return ((XCData)o).Value;
                                        else return o.ToString();
                                      }))
        ).ToList();

此解决方案通过换行符连接&lt;body&gt; 的所有子节点。对于每个子节点,如果它是 CData 部分,则该值将用于 String.Join() 操作。否则,如果是&lt;br/&gt;CData 以外的任何内容,则将采用整个标记。

如果您想区别对待其他子节点类型,您可以根据需要轻松修改if ... else ...部分。

【讨论】:

  • 优秀的解决方案!你能指定使用 linq 与普通字符串替换相比的优势吗?
猜你喜欢
  • 1970-01-01
  • 2015-07-02
  • 2012-04-13
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
相关资源
最近更新 更多