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
Post a Comment