最简单的方法来分类html与xml?

时间:2011-09-16 18:38:32

标签: html ruby xml

从链接检索页面正文后,验证内容是否为xml的最有效方式是什么?

目前我正在测试正则表达式/xmlns/的文本,但是如果数据集足够大,我相信这会导致偶然的误报。有谁知道更好的解决这个问题的方法?

我正在使用Ruby编程语言,如果这有任何不同。

3 个答案:

答案 0 :(得分:1)

如果文档包含<feed xmlns="http://www.w3.org/2005/Atom">,则可能是原子Feed,或者您可以搜索</feed>

如果文档包含</rss>,则可能是rss Feed。

正则表达式是你的朋友。

答案 1 :(得分:1)

XML应该以{{1​​}}或<?xmlbut they don't have to开头,感谢Mike Sokolov,因为这一点上的头部优势:)所以你可能想要检查

<!DOCTYPE

原谅。

然后,如果第一个元素是

/\A\s*(<\?xml|<!DOCTYPE)?/

你有一个Atom feed

如果第一个元素是

<feed xmlns="http://www.w3.org/2005/Atom">

(可能有额外的<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> 个属性)然后你有一个RSS 1.0 feed

如果第一个元素是

xmlns

(同样可能有<rss version="2.0"> 个属性)然后你有一个RSS 2.0 feed

您可能不需要担心各种0.9 *版本。因此,请检查XML标头,然后检查以上三个元素之一(可能有额外的属性),其中包含一些松散的正则表达式(正常情况,可能太松散):

xmlns

您将能够在没有太多开销的情况下发现Feed。

您可能希望跟踪被拒绝的内容一段时间,然后通过完整的解析器运行拒绝,以确保您没有遗漏任何内容。标准通常被认为是“粗略的建议”,所以你会在野外遇到很多奇怪的事情。

答案 2 :(得分:1)

最好的方法是查看HTTP Content-Type标头。这通常是以下之一:text / html,text / xml或text / xhtml,当然,在野外任何事情都可以。

检查内容,如果需要,你应该可以查找xml声明,但是因为xml文档不需要它,即使它存在,一些html文档也是 xml文档,所以这不会告诉你太多。

查看内容的最佳位置可能是&lt; DOCTYPE&gt;宣言。对于html,这通常是:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

但您当然会在该基本主题上找到许多变体。

要看的另一件事是文档的根元素:如果有local-name =“html”;即看起来这是一个非常好的标志,你正在处理HTML。

“xmlns”的存在并不反映html;许多html文档都包含名称空间。它们通常作为html文档的标准部分生成,并且是使用嵌入在html中的mathml和svg所必需的。