簡體   English   中英

通過linqToXml讀取標簽內的cdata和html

[英]Read cdata and html inside a tag by linqToXml

我想擺脫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();
    }

當我運行它時,我只是獲得了CDATA中的值而沒有br標簽! 我也可以得到br標簽嗎?

最終的解決方案取決於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();

此解決方案通過換行符連接<body>的所有子節點。 對於每個子節點,如果它是CData節,則將對String.Join()操作采用該值。 否則,如果它是<br/>CData以外的其他任何東西,則將使用整個標記。

如果您想以其他方式對待其他子節點類型,則可以根據需要輕松修改if ... else ...部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM