XPath表达式不返回//元素,但// *返回计数

时间:2010-02-24 01:56:13

标签: java xpath xml-namespaces xom tag-soup

我正在使用带有以下示例数据的XOM:

Element root = cleanDoc.getRootElement();
//find all the bold elements, as those mark institution and clinic.
Nodes nodes = root.query("//*");

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml">
    <head>
        <title>Patient Information</title>
    </head>
</html>

以下元素返回许多元素(来自真实数据):

//*

但是类似

//head

什么都不返回。如果我浏览根的子节点,数字似乎匹配,如果我打印元素名称,一切看起来都是正确的。

我正在使用HTML,使用tagsoup解析它,然后从结果字符串构建XOM文档。这部分可能会出现如此可怕的错误?我觉得这里有一些奇怪的编码问题,但我只是没有看到它。 Java字符串是字符串,对吧?

1 个答案:

答案 0 :(得分:6)

您的文档有一个默认命名空间,这意味着在XPath模型中所有元素都在该命名空间中。

查询应为//html:head。您必须提供命名空间映射到XPath查询。

请注意,虽然XPath表达式使用名称空间前缀,但它必须匹配名称空间uri。

XPathContext ctx = new XPathContext("html", "http://www.w3.org/1999/xhtml");
Nodes nodes = root.query("//html:head", ctx );