java - XPath 解析器 java 冗余

标签 java xml xpath xml-parsing

所以我需要用 XPath 解析 XML 文件。 一切正常,但如果我有一个标 checkout 现多次,我的代码会显示标签内所有相同标签的所有子标签。 例如:我有一个

<a>
  <b></b>
</a>
<c></c>
<a>
  <b></b>
</a>

输出将是:

a
 b
 b
c
a
 b
 b

我的代码是这样的:

 public void parseFileXPath() throws ParserConfigurationException, IOException, SAXException, XPathExpressionException {
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    Document doc = documentBuilder.parse(file);
    doc.getDocumentElement().normalize();

    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();

    String expression;
    Node node;
    NodeList nodeList;

    expression="/*";
    node = (Node) xpath.evaluate(expression,doc, XPathConstants.NODE);
    //System.out.println(node.getNodeName());

    expression="/frogans-fsdl/*";
    nodeList = (NodeList) xpath.evaluate(expression,doc, XPathConstants.NODESET);


    NodeList nodeList1;


    for (int i = 0; i < nodeList.getLength(); i++) {
        String aTag = nodeList.item(i).getNodeName();

        System.out.println(aTag);
        expression="/frogans-fsdl/"+aTag+"/*";
        nodeList1 = (NodeList) xpath.evaluate(expression,doc,XPathConstants.NODESET);

        for (int j = 0; j < nodeList1.getLength(); j++) {

            System.out.println("\t"+nodeList1.item(j).getNodeName());
            //TODO
            //Display what's inside each tag
        }

        expression="";
    }



}

请问有什么帮助吗?

最佳答案

以下内部循环代码可能有助于获得您想要的输出:

    NodeList nodeList1;

    for (int i = 0; i < nodeList.getLength(); i++) {
        System.out.println(nodeList.item(i).getNodeName());
        expression="*";
        nodeList1 = (NodeList) xpath.evaluate(expression,nodeList.item(i),XPathConstants.NODESET);
        for (int j = 0; j < nodeList1.getLength(); j++) {
            System.out.println("\t"+nodeList1.item(j).getNodeName());
        }
    }

基本上,您需要将 nodeList.item(i) 作为后续 xpath 评估的第二个参数传递。

关于java - XPath 解析器 java 冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36114652/

相关文章:

java - RxJaxa 1 中的改造 2 可观察到的 : How to convert to RxJava 2

c - 命名空间和 xpath 的 libxml2 错误

java - xml 属性文件中的多个部分

python - 在 Python 中使用 Selenium 单击图像抛出无效的 xpath

python - 从嵌套的 HTML 中提取文本内容,同时排除一些特定的标签;废料

php - 从另一个 xpath 查询节点查询 xpath

java - 无法在插件外部合并 Eclispe JDT codeAssist 设施

java - 推土机和延迟初始化收集错误

java - 在 lwjgl (Java) 中的文本渲染初始化代码后无法绘制任何内容

C# - XmlNamespaceManager 存在于 'System.Xml.ReaderWriter' (...) 和 'System.Xml (...)'