XPATH query does not return result

Hi, given the following code:

private void extractLink(ScriptFile file) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException { Document d = this.parseFile(file); XPathFactory xpf = XPathFactory.newInstance(); XPath xpath = xpf.newXPath(); XPathExpression expr = xpath.compile("//link"); Object result = expr.evaluate(d, XPathConstants.NODE); Node node = (Node) result; if(result!=null) { this.log.debug("Links found: "+node.toString()); } else { this.log.debug("No link found!"); } } private Document parseFile(ScriptFile file) throws SAXException, IOException, ParserConfigurationException { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(false); dbf.setNamespaceAware(true); dbf.setIgnoringComments(true); dbf.setIgnoringElementContentWhitespace(false); dbf.setExpandEntityReferences(false); dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); DocumentBuilder db = dbf.newDocumentBuilder(); return db.parse(new ByteArrayInputStream(file.getFile())); } 

And the input is like:

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head profile="http://selenium-ide.openqa.org/profiles/test-case"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="selenium.base" href="" /> <title>Default-Config-Accounts</title> </head> <body> </body> </html> 

Why is my query returning null?

+4
source share
1 answer

I am not familiar with Java at all, but my suspicions about XPath are due to the lack of (obvious to me) namespace processing in your code. From your input, the tag is in the default namespace " http://www.w3.org/1999/xhtml ", so I expect you to write code that tells Java XPath about this namespace.

A little googling search finds this useful XPath blog post with namespaces in Java that looks like it solves your problem.

+2
source

Source: https://habr.com/ru/post/1302254/


All Articles