Linq-to-XML没有获得包含html标记的节点的内容

时间:2010-04-15 13:48:54

标签: xml linq-to-xml

我有一个XML文件,我正在尝试使用Linq-to-XML进行解析。其中一个节点包含一些我无法检索的HTML。

XML类似于:

<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<image><img src="/Images/m1cznk4a6fh7.jpg"  /></image>
<contentType>Banner</contentType>
</root>

代码是:

XDocument document = XDocument.Parse(content.XML);
XElement imageElement = document.Descendants("image").SingleOrDefault();
image = imageElement.Value; // Doesn't get the content, while if I specify .Descendants("contentType") it works

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果您要在XML元素中存储HTML,它应该在<![CDATA[]]>注释中,以便LINQ2XML知道不将其视为额外的XML标记。

<image><![CDATA[<img src="Images/abc.jpg />]]></image>

如果内存服务,你不必做任何特殊的事情来提取值而不用CDATA评论包装它,但你可能需要调用Value以外的属性。我不记得了。

答案 1 :(得分:1)

.Value表示标记中的任何文本和任何子标记,但您没有任何文本。解析它时,<img/>被视为XML标记,不是特定于HTML(Linq不知道其中的区别)。例如,如果您将XML写为:

<image>
    <img>/Images/m1cznk4a6fh7.jpg
    </img>
</image>

然后你的代码就可以了。

您必须在后代中更进一步使用<img/>标记,然后获取.Value属性src以检索所需的文字。

答案 2 :(得分:0)

这是因为Value下只有Image嵌套了另一个元素(img)。您需要执行以下操作:

XElement imgElement = document.Descendants("image").SingleOrDefault().FirstNode;

然后访问Value属性以获取src。否则,如果您要查找img标记作为纯文本,则需要将其作为CDATA部分保存在XML文档中e..g

<image><![CDATA[<img src="/Images/m1cznk4a6fh7.jpg" />]]></image>