首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XPath/getChildElements无法在XOM中获取XML子元素

XPath/getChildElements无法在XOM中获取XML子元素
EN

Stack Overflow用户
提问于 2011-08-15 11:44:34
回答 2查看 797关注 0票数 3

我必须解析一个OAI-PMH XML文件,如下所示。我想遍历ListRecord中的所有<record>节点。

代码语言:javascript
复制
<?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>

但是当我使用XOM1.2.5获取这些节点时,无论我使用哪种方法(query或getChildElements),它总是返回0个节点。

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

代码语言:javascript
复制
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

我不知道为什么我不能在XML中获得ListRecordsrecord。我错过了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-15 11:55:16

我敢打赌这是一个域问题--您是否尝试过使用xmlns参数?尝试:

代码语言:javascript
复制
 document.getRootElement
         .getChildElements("ListRecords", 
                           "http://www.openarchives.org/OAI/2.0/").size

基本上,当给定XML对象的默认ns时,许多语言都需要该名称空间来查找该节点--即使它在输出的DOM本身中没有前缀。

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

票数 2
EN

Stack Overflow用户

发布于 2011-08-15 11:55:16

我发现这是XPath Expression returns nothing for //element, but //* returns a count的复制品

下面的代码可以工作,我需要将标记名绑定到一个名称空间。

代码语言:javascript
复制
scala> val context = new XPathContext("xsi", "http://www.openarchives.org/OAI/2.0/")
context: nu.xom.XPathContext = nu.xom.XPathContext@19a3f495

scala> document.query("//xsi:record", context).size
res6: Int = 1
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7061536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档