如何在 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 id和chapter 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 id
和 chapter 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']&&
xpath 中的运算符为 and
: //page[@id='2' and @cid='1' and @bid='Book 1']
以上是关于如何在 Java 中使用 XPath 从 XML 中获取特定节点?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 XPATH 或 Apache POI 从 XML 中过滤水印文本?