gpt4 book ai didi

c# - 从 HTML 节点读取值

转载 作者:太空狗 更新时间:2023-10-29 15:38:36 26 4
gpt4 key购买 nike

我是 XML/HTML 解析的新手。甚至不知道正确的词来正确搜索重复项。

我有这样的 HTML 文件:

<body id="s1" style="s1">
<div xml:lang="uk">
<p begin="00:00:00" end="00:00:29">
<span fontFamily="SchoolHouse Cursive B" fontSize="18">I'm great!</span>
</p>

现在我需要 00:00:0000:00:29I'm great! 来自它。我可以这样读:

XmlTextReader reader = new XmlTextReader(file);
while (reader.Read())
{
if (reader.NodeType != XmlNodeType.Element)
continue;

if (reader.LocalName != "p")
continue;

var a = reader.GetAttribute(0);
var b = reader.GetAttribute(1);

if (reader.LocalName == "span")
{
XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlNode elem = doc.DocumentElement.FirstChild;
var c = elem.InnerText;
}
}

我在变量 abc 中获取值。但 HTML 格式略有变化。 现在 HTML 看起来像这样:

<body id="s1" style="s1">
<div xml:lang="uk">
<p begin="00:00:00" end="00:00:29">I'm great! </p>

在这种情况下,我如何解析出 00:00:0000:00:29I'm great! ?我试过这个:

XmlTextReader reader = new XmlTextReader(file);
while (reader.Read())
{
if (reader.NodeType != XmlNodeType.Element)
continue;

if (reader.LocalName != "p")
continue;

var a = reader.GetAttribute(0);
var b = reader.GetAttribute(1);

XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlNode elem = doc.DocumentElement.FirstChild;
var c = elem.InnerText;
}

但我收到此错误:This document already has a 'DocumentElement' node. at line doc.Load(reader)。如何正确阅读以及导致问题的原因是什么?我正在使用 .NET 2.0

最佳答案

看起来您有想要使用 XML 解析器解析的 HTML。这也可能是您得到 This document already has a 'DocumentElement' node. 异常的原因:因为您有多个根节点,这在 HTML 中是允许的(或更好:容忍的),但不是 XML。

改用 HTML 解析器。不幸的是,.NET 框架中没有内置任何东西。您必须为此使用第三方库。一个非常好的是 HTML agility pack ,那个 oleksii 已经在他的评论中提到了。

编辑:

从您的评论中,我感觉您不熟悉 HTML 和 XML 之间没有直接关系这一事实。图片取自 here很好地说明了这一点:

Relation between SGML, HTML and XML

XML 既不是 HTML 的子集,也不是相反。仅当您拥有严格的 XHTML(这种情况很少见)时,您才能拥有可以使用 XML 解析器解析的 HTML 文档。但要注意,如果此类 XHTML 文档的代码中存在错误,解析器将失败,而普通浏览器将继续显示该页面。此外,XHTML 的 future 相当不明朗,现在 HTML5 正在缓慢但稳步地走向生活......

总结:为了避免所有这些陷阱,走简单的路,选择 HTML 解析器。

关于c# - 从 HTML 节点读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11277380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com