如何在 Java 中使用 XPath 从 XML 中获取特定节点?

Posted

技术标签:

【中文标题】如何在 Java 中使用 XPath 从 XML 中获取特定节点?【英文标题】:How can I fetch specific nodes from XML using XPath in Java? 【发布时间】:2015-08-22 11:49:29 【问题描述】:

我的xml文件结构是这样的

<?xml version="1.0" encoding="utf-8" ?>
<book>
    <chapters>
        <chapter id="1">
            <page id="1" cid= "1" bid = "Book1">
                <text>Hi</text>
            </page>
            <page id="2" cid= "1" bid = "Book1">
                <text>Hi</text>
            </page>
        </chapter>
        <chapter id="2">
            <page id="1" cid= "2" bid = "Book1">
                <text>Hi</text>
            </page>
            <page id="2" cid= "2" bid = "Book1">
                <text>Hi</text>
            </page>
        </chapter>
        <chapter id="3">
            <page id="1" cid= "3" bid = "Book1">
                <text>Hi</text>
            </page>
            <page id="2" cid= "3" bid = "Book1">
                <text>Hi</text>
            </page>
        </chapter>
    </chapters>
</book>

我想通过传递page idchapter id来获取特定的页面节点。我怎样才能做到这一点?

另外,书节点包含的章节太多,每章包含很多页。所以,我使用 SAX 解析器来解析内容。

【问题讨论】:

SAX 中不支持 xpath? :Can SAX Parsers use XPath in Java? 我不相信您可以使用带有 SAX 的 xpath 进行查询,因为该文档在任何时候都不会完全保存在内存中。您当然可以在解析时将章节和页面列表存储在某些数据结构中。您可以发布您的 SAX 相关代码吗? @har07 感谢您的更新。我将使用 DOM 解析器。您能否为我提供使用 DOM 的解决方案? @ug_ 感谢您的更新。我将使用 DOM 解析器。您能否为我提供使用 DOM 的解决方案? 感谢您的更新@Krish 【参考方案1】:

“如何在 Java 中使用 XPath 从 XML 中获取特定节点?”

我对 Java 和 android 不是很熟悉,但是从您的 XML 示例中获取特定 page 的 xpath,传递 page idchapter id 应该看起来像这样:

//chapter[@id='chapter_id_here']/page[@id='page_id_here']

简要说明:

//chapter :在 XML 中的任意位置找到 chapter 元素... [@id='chapter_id_here'] : ...其中id 属性值等于特定章节ID /page :从每个过滤的chapter 元素中,找到子元素page... [@id='page_id_here'] : ...其中id 属性值等于特定页面ID

您可以按照这些线程执行以在 Java 中执行 xpath 表达式:How to read XML using XPath in Java,在 Android 中:Search in XML File with XPath in Android

【讨论】:

如何为页面指定多个过滤器?下面的格式正确吗?? //page[@id='2'&&@cid='1'&&bid='Book 1'] &amp;&amp; xpath 中的运算符为 and : //page[@id='2' and @cid='1' and @bid='Book 1']

以上是关于如何在 Java 中使用 XPath 从 XML 中获取特定节点?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XPATH 或 Apache POI 从 XML 中过滤水印文本?

如何使用 XPATH 从 XML 中解析和获取准确的结果

java 从XML java XPath获取字段

如何使用多个 XPath 查询在 c# 中选择单个 XML 节点

从 XML 节点 java 生成/获取 xpath

在Java中使用xpath对xml解析