【问题标题】:How can I fetch specific nodes from XML using XPath in Java?如何在 Java 中使用 XPath 从 XML 中获取特定节点?
【发布时间】: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

标签: java android xml xpath saxparser


【解决方案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']
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多