【发布时间】:2012-07-01 21:44:06
【问题描述】:
我是 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:00、00:00:29 和 I'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;
}
}
我在变量 a、b 和 c 中获取值。但 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:00、00:00:29 和 I'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.doc.Load(reader) 行。如何正确阅读以及造成问题的原因是什么?我正在使用 .NET 2.0
【问题讨论】:
-
看看html agility pack,好像是需要解析html的。
-
@oleksii 当 System.Xml 下有很多库时,我真的应该使用第三方库吗?此外,我没有做任何与 html 相关的事情
-
很明显,XML != HTML,我认为如果您进行任何 html 解析,html 敏捷包将很有用,因为您似乎在示例中有一些 html。如果您不使用 html,那么不妨看看 LINQ-to-XML。
-
@oleksii:我的意思是操作,而不是你 :) 我基本上只是确认了你所说的。
-
有人可以相应地编辑问题的标题吗?我不太确定这个 XML 什么时候听起来像 HTML
标签: c# html html-parsing