Java 如果XML文件包含;xmlns";,如何使用XPath从XML文件中获取文本

Java 如果XML文件包含;xmlns";,如何使用XPath从XML文件中获取文本,java,xml,jdom,Java,Xml,Jdom,我从网站()获得一个XML文件 网址是: 内容是: <?xml version="1.0" encoding="utf-8"?> <root xmlns="http://www.abc.com/"> <name>Hello!</name> </root> 我测试删除xmlns=”http://www.abc.com/“从XML文件开始,这就是工作 如何更改我的java代码以获得Hello,如果xmlns=”http://www

我从网站()获得一个XML文件

网址是:

内容是:

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.abc.com/">
    <name>Hello!</name>
</root>
我测试删除
xmlns=”http://www.abc.com/“
从XML文件开始,这就是工作

如何更改我的java代码以获得
Hello,如果
xmlns=”http://www.abc.com/“
是否存在

(我无法更改此XML文件)


谢谢您的帮助:)

您需要让查询知道xml名称空间。这里的答案看起来很有用:

您还可以将查询更改为使用本地名称忽略名称空间:

XPath xpath = XPath.newInstance("/*[local-name() = 'root']");
应该返回名为root的节点。也就是说,如果它支持它,并且我正确地键入了它!:)我不熟悉XML+XPATH的JavaAPI

请注意,xml名称空间的存在是为了将节点“root”与任何其他名为“root”的节点区分开来。就像类/包名称空间一样。忽略它们可能会导致名称冲突。你的国籍可能不同

嗯,,
扎克

我最近没有这样做。但快速搜索发现

指向XPathFactory的用法:

NamespaceContext context = new NamespaceContextMap("http://www.abc.com/" );
或者,您可以使用Zach的答案,忽略给定的名称空间(如果我正确理解他的话)。如果在同一层次结构级别上有更多的“根”节点,这可能会导致问题

NamespaceContext context = new NamespaceContextMap("http://www.abc.com/" );