有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从org创建的dom4j文档中的java XPath评估。w3c。多姆。文档未按预期工作

我正在尝试使用dom4j 1.6.1来使用XPath遍历以下文档。我在寻找<query>元素的数量

<?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 by Quantity List"/>
         <query name="Sales Figures America Region Combination Chart"/>
      </queries>
   </querySet>
</reportLineageResponse>

下面是调用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();
}

我正确指定了名称空间,但得到了0个结果。有什么问题吗


编辑:如果我看看dom4j。文档创建后,名称空间错误:

<?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 by Quantity List"/>
         <query xmlns="" name="Sales Figures America Region Combination Chart"/>
      </queries>
   </querySet>
</reportLineageResponse>

编辑:以下是创建组织的代码。w3c。多姆。文件:

Document loadDocument(URL url) {
    InputStream stream = url.openStream();
    DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document result = docBuilder.parse(stream);
    stream.close();
    return result;
}

共 (1) 个答案

  1. # 1 楼答案

    按如下方式更改xml加载:

    DocumentBuilderFactory docBuilderFactor = DocumentBuilderFactory.newInstance();
    docBuilderFactor.setNamespaceAware(true);
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();