我有一个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
有什么想法吗?
答案 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>