我想摆脱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标签吗?
答案 0 :(得分:2)
最终解决方案取决于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 ...
部分。