Linq-to-XML 未获取包含 html 标签的节点的内容
我有一个 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
有什么想法吗?
I have an XML file that I'm trying to parse with Linq-to-XML. One of the nodes contains a bit of HTML, that I cannot retrieve.
The XML resembles:
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<image><img src="/Images/m1cznk4a6fh7.jpg" /></image>
<contentType>Banner</contentType>
</root>
The code is:
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
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
.Value
表示标签和任何子标签内的任何文本,但您没有任何文本。当您解析它时,被视为 XML 标记,而不是特定于 HTML(Linq 不知道其中的区别)。例如,如果您将 XML 编写为:
那么您的代码就可以工作。
您必须在后代中进一步到达
标记,然后获取属性
src
的.Value
来检索您需要的文本。.Value
means any text within a tag and any child tags, but you don't have any. When you parsed it,<img/>
was viewed as an XML tag, not specific for HTML (Linq doesn't know the difference). For example, if you had your XML written as:Then your code would work.
You'll have to go further in your decendents to the
<img/>
tag and then get the.Value
of attributesrc
to retrieve the text you need.如果要将 HTML 存储在 XML 元素内,则应将其放在
注释内,以便 LINQ2XML 知道不要将其视为附加 XML 标记。
如果没记错的话,您不必执行任何特殊操作来提取没有 CDATA 注释包装的值,但您可能需要调用
Value
以外的属性。我不太记得了。If you're going to be storing HTML inside the XML elements it should be inside a
<![CDATA[]]>
comment so that LINQ2XML knows not to treat it as additional XML markup.If memory serves, you shouldn't have to do anything special to extract the value without the CDATA comment wrapping it, but you may need to call a property other than
Value
. I don't quite recall.这是因为
Image
下没有嵌套Value
,只有另一个元素 (img
)。您需要执行以下操作:然后访问
Value
属性以获取src
。否则,如果您正在寻找纯文本形式的img
标记,则需要将其作为 CDATA 部分保存在 XML 文档中,例如That is because there is no
Value
nested underImage
only another element (img
). You would need to do something like:Then access the
Value
property to getsrc
. Otherwise, if you are looking for theimg
tag as plain text you would need to save it in your XML doc as a CDATA section e..g