2011-08-15 16 views
3

OAI-PMH XMLファイルを解析する必要があります。 ListRecord内のノード<record>をすべて反復処理したいと思います。私は関係なく、私は(クエリまたはgetChildElements)を使用しているものの方法、それらのノードを取得しないようにXOM 1.2.5を使用している場合XpathでXPath/getChildElementsがXML子を取得できませんでした

<?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> 

は、しかし、それは常に0のノードを返します。

次は私がScalaのインタープリタで使用したコードです:

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

scala> val builder = new Builder 
builder: nu.xom.Builder = [email protected] 

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を得ることができなかった理由をさっぱりだが。私は何か見落としてますか?

答えて

2

xmlns問題ですか?ドメインパラメータを使用してみましたか?試してみてください:

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

を基本的には、多くの言語は、XMLオブジェクトのデフォルトのNS与えられたとき、そのノードを検索し、その名前空間が必要になります - それは出力DOM自体に接頭辞されていない場合でも。

(これは、Brian Hsuの説明のようにXPathContextオブジェクトを使用して行うこともできます)

関連する問題