Linq-to-XML 未获取包含 html 标签的节点的内容

发布于 2024-08-29 04:36:38 字数 596 浏览 5 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

↙温凉少女 2024-09-05 04:36:38

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

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

那么您的代码就可以工作。

您必须在后代中进一步到达 标记,然后获取属性 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:

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

Then your code would work.

You'll have to go further in your decendents to the <img/> tag and then get the .Value of attribute src to retrieve the text you need.

悲喜皆因你 2024-09-05 04:36:38

如果要将 HTML 存储在 XML 元素内,则应将其放在 注释内,以便 LINQ2XML 知道不要将其视为附加 XML 标记。

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

如果没记错的话,您不必执行任何特殊操作来提取没有 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.

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

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.

沧笙踏歌 2024-09-05 04:36:38

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

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

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

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

That is because there is no Value nested under Image only another element (img). You would need to do something like:

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

Then access the Value property to get src. Otherwise, if you are looking for the img tag as plain text you would need to save it in your XML doc as a CDATA section e..g

<image><![CDATA[<img src="/Images/m1cznk4a6fh7.jpg" />]]></image>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文