HTML,xmlns,命名空间,xml

问题描述

| 我只是用nekohtml + dom4j解析html文档时遇到了一些问题。 我发现我的xpath表达式不再起作用,因为最近在html源代码中添加了新的默认html xml命名空间。 规格说明: 前缀xmlns仅用于 声明名称空间绑定,由 定义绑定到名称空间名称 http://www.w3.org/2000/xmlns/。它必须 未声明。其他前缀必须 不受此名称空间名称的约束, 并且不得将其声明为 默认名称空间。元素名称必须 没有前缀xmlns。 但是在我的html文档中,最近(我想)在html标签中添加了:xmlns = \“ http://www.w3.org/1999/xhtml \” 我找到2个解决方案: 1)删除名称空间:
DOMParser parser = new DOMParser();
parser.setFeature(\"http://xml.org/sax/features/namespaces\",false);
parser.parse(url);
根据NekoHTML常见问题解答所说。 2)在我的xpath中添加一个前缀,绑定到默认的html名称空间。 (似乎无法将前缀“空字符串”绑定到我想要的名称空间)
Map<String,String> XPATH_NAMESPACES = new HashMap<String,String>();
XPATH_NAMESPACES.put(\"my_prefix\",\"http://www.w3.org/1999/xhtml\");

XPath xpath = document.createXPath(xpathExpr);
xpath.setNamespaceURIs(XPATH_NAMESPACES);
Element element = (Element) xpath.selectSingleNode(document);
然后,我使用// my_prefix:td代替// td 我之所以发布这些解决方案,是因为有些人可能会觉得这篇文章有用。 另请参见http://www.edankert.com/defaultnamespaces.html#Jaxen_and_Dom4J 但是我真正想知道的是: 为什么要使用与以下名称空间不同的名称空间 默认的一个? 为什么有人从http://www.w3.org/2000/xmlns/切换到 http://www.w3.org/1999/xhtml? 为什么我们通常使用w3命名空间?命名空间是否有一些 对浏览器有影响吗? 我想我的问题对某些人来说似乎很明显,但是我并没有真正理解它带来的好处。 我已经了解了html和xhtml之间的区别。我猜想使用xhtml dtd的人宁愿使用此命名空间,但是除了它给爬虫或类似的东西带来更多痛苦之外,真正的兴趣是什么? PS:我已经看到,要从html传递到xhtml,您必须同时添加xmlns和xml:lang: 因此,由于未添加xml:lang,所以这可能不是我要解析的网站的目的... 谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)