微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – XPath / getChildElements都无法在XOM中获取XML子级

我将解析一个OAI-PMH XML文件,如下所示.我想迭代所有< record> ListRecord中的节点.

<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd" xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <responseDate>2010-12-30T10:46:39.654+08:00</responseDate>
  <request verb="ListRecords" MetadataPrefix="oai_dc">http://172.16.1.118/ahd/oai2.do</request>
  <ListRecords>
    <record>
      <header>
        <identifier>9010402101001001</identifier>
      </header>
      <Metadata>
        <oai_dc:dc xsi:schemaLocationfiltered="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/">
          <dc:identifier>9010402101001001</dc:identifier>
        </oai_dc:dc>
      </Metadata>
    </record>
    <resumptionToken>1509/1509</resumptionToken>
  </ListRecords>
</OAI-PMH>

但是当我使用XOM 1.2.5获取那些节点时,无论我使用什么方法(query或getChildElements),它总是返回0个节点.

以下是我在Scala解释器中使用的代码

scala> import nu.xom.Builder
import nu.xom.Builder

scala> val builder = new Builder
builder: nu.xom.Builder = nu.xom.Builder@6682d439

scala> val document = builder.build(new java.io.File("/home/brianhsu/qqq.xml"))
document: nu.xom.Document = [nu.xom.Document: OAI-PMH]

scala> document.query("//record").size
res0: Int = 0

scala> document.query("//ListRecords").size
res1: Int = 0

scala> document.getRootElement.getChildElements("ListRecords").size
res2: Int = 0

我不知道为什么我无法获得ListRecords并在XML中记录.我错过了什么?

解决方法:

我打赌这是一个xmlns问题 – 你尝试过使用domain参数吗?尝试:

 document.getRootElement
         .getChildElements("ListRecords", 
                           "http://www.openarchives.org/OAI/2.0/").size

基本上,当在XML对象上给出认ns时,许多语言将要求该命名空间查找该节点 – 即使它在输出的DOM本身中没有前缀.

(这也可以使用XPathContext对象完成,如Brian Hsu所示)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。