简体   繁体   English

XPATH查询未返回结果

[英]XPATH Query 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 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? 为什么我的查询返回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. 我一般不熟悉Java,但是我的XPath怀疑是由于代码中缺少(对我来说很明显)名称空间处理引起的。 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. 根据您的输入,标记位于默认名称空间“ http://www.w3.org/1999/xhtml ”中,因此,我希望您必须编写一些代码来告诉Java XPath设备有关此名称空间的信息。

A little googling finds this useful blog entry XPath with namespaces in Java which looks to me like it will solve your problem. 稍作搜索就会发现这个有用的博客条目XPath以及Java中的名称空间,在我看来,它可以解决您的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM