问题
I'm using XOM with the following sample data:
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>
The following element returns many elements (from real data):
//*
but something like
//head
Returns nothing. If I run through the children of the root, the numbers seem to match up, and if I print the element name, everything seems to look correct.
I'm taking HTML, parsing it with tagsoup, and then building a XOM Document from the resulting string. What part of this could go so horribly wrong? I feel there's some weird encoding issue going on here, but I'm just not seeing it. Java Strings are Strings, right?
回答1:
Your document has a default namespace, which means in the XPath model all the elements are in that namespace.
The query should be //html:head
. You will have to supply the namespace mapping to the XPath query.
Note that while the XPath expression uses a namespace prefix, it is the namespace uri that must match.
XPathContext ctx = new XPathContext("html", "http://www.w3.org/1999/xhtml");
Nodes nodes = root.query("//html:head", ctx );
来源:https://stackoverflow.com/questions/2323139/xpath-expression-returns-nothing-for-element-but-returns-a-count