开发者

XPATH Query not return result

开发者 https://www.devze.com 2022-12-20 23:03 出处:网络
Hi given the following Code: private void extractLink(ScriptFile file) throws SAXException, IOException,

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();
  开发者_如何学Pythonreturn db.parse(new ByteArrayInputStream(file.getFile()));
 }

And an input 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 does my query return null?


I'm not familiar with Java in general, but my XPath suspicions are aroused by the lack of (obvious to me) namespace handling in your code. From your input, the tag is in the default namespace "http://www.w3.org/1999/xhtml", so I'd expect you to have to write some code that tells the Java XPath apparatus about this namespace.

A little googling finds this useful blog entry XPath with namespaces in Java which looks to me like it will solve your problem.

0

精彩评论

暂无评论...
验证码 换一张
取 消