java - XPath evaluation in dom4j Document created from org.w3c.dom.Document doesn't work as expected -


i'm trying use dom4j 1.6.1 traverse following document using xpath. i'm looking number of <query> elements.

<?xml version="1.0" encoding="utf-8"?> <reportlineageresponse>    <queryset expressionlocale="en-us">       <queries xmlns="http://developer.cognos.com/schemas/report/9.0/">          <query name="top 10 sales staff list"/>          <query name="top 10 sales staff quantity list"/>          <query name="sales figures america region combination chart"/>       </queries>    </queryset> </reportlineageresponse> 

here code invoking dom4j.

int numberofqueries(org.w3c.dom.document jaxpdocument) {     domreader domreader = new domreader();     org.dom4j.document document = domreader.read(jaxpdocument);      map<string, string> nsmap = collections.singletonmap("rep", "http://developer.cognos.com/schemas/report/9.0/");     xpath queryxp = document.createxpath("/reportlineageresponse/queryset/rep:queries/rep:query")     queryxp.setnamespaceuris(nsmap);     list<node> queries = queryxp.selectnodes(document);     return queries.size(); } 

i specified namespace correctly, yet 0 results. problem?


edit: if @ dom4j.document after creating it, has namespaces wrong:

<?xml version="1.0" encoding="utf-8"?> <reportlineageresponse>    <queryset expressionlocale="en-us">       <queries xmlns="http://developer.cognos.com/schemas/report/9.0/">          <query xmlns="" name="top 10 sales staff list"/>          <query xmlns="" name="top 10 sales staff quantity list"/>          <query xmlns="" name="sales figures america region combination chart"/>       </queries>    </queryset> </reportlineageresponse> 

edit: here code creates org.w3c.dom.document:

document loaddocument(url url) {     inputstream stream = url.openstream();     documentbuilder docbuilder = documentbuilderfactory.newinstance().newdocumentbuilder();     document result = docbuilder.parse(stream);     stream.close();     return result; } 

change xml loading follows:

documentbuilderfactory docbuilderfactor = documentbuilderfactory.newinstance(); docbuilderfactor.setnamespaceaware(true); documentbuilder docbuilder = docbuilderfactory.newdocumentbuilder(); 

Comments