【发布时间】:2024-01-06 05:45:01
【问题描述】:
我最近开始学习 C#。 MSDN 有一个示例,您可以通过直接获取 XML 文件来创建一个 RSS 应用程序,所以我尝试了自己的一些方法,并且像大多数时候一样,我没有做对。 把叹息声放在这里。
由于页面是 HTML,我尝试寻找 HTML 到 XHTML 的转换器,我发现了这个(非常有趣)叫做 HTML-Cleaner。
它用<dd> 标签替换了不需要的标签,但我想跳过这些标签,所以我自己做了修改:
public override bool Read()
{
bool status = base.Read();
if( status )
{
if( base.NodeType == XmlNodeType.Element )
{
dowrite = false;
// Got a node with prefix. This must be one of those "<o:p>"
// or something else. Skip this node entirely. We want prefix-
// less nodes so that the resultant XML requires no namespace.
foreach (string line in AllowedTags)
{
if (base.Name == line ||
(base.Name == "html" && first == false))
{
dowrite = true;
first = true;
}
}
if( base.Name.IndexOf(':') > 0 )
dowrite=false;
if(!dowrite)
base.Skip();
}
}
return status;
}
问题是它只打印一个<dd> 标签,没有别的。即使存在允许的标签,它也会跳过它们。
为什么会这样?任何帮助将不胜感激。如果您有其他方法,请随时提出建议。
编辑:无论如何要实现这个???
【问题讨论】:
-
你知道,解析 XML 有更简单的方法——看看 Linq to xml (
XDocumentclass et al),或者使用带有SelectNodes()方法的 XPath 表达式987654327@/XmlElement.此外,您可能想查看 HtmlAgilityPack(其 API 非常接近XmlDocument的模型,并使用 XPaths 进行查询) -
HtmlAgilitypack 是一件很棒的事情,但是如果你能够将你的 html 转换为 xml,只保留你想要的标签,那么我想,使用 XPath 会更容易,还是和直接一样使用 HTmlAgilityPack.?