2011-05-31 5 views
0

私はJaxenを使ってXpathの評価に大きな問題を抱えています。OAI Jaxen XPathの問題

ここではXMLの一部は、私が上で評価しています:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> 
    <responseDate>2011-05-31T13:04:08+00:00</responseDate> 
    <request metadataPrefix="oai_dc" verb="ListRecords">http://citeseerx.ist.psu.edu/oai2</request> 
    <ListRecords> 
    <record> 
     <header> 
     <identifier>oai:CiteSeerXPSU:10.1.1.1.1484</identifier> 
     <datestamp>2009-05-24</datestamp> 
     </header> 
     <metadata> 
     <oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> 
      <dc:title>Winner-Take-All..</dc:title> 
      <dc:relation>10.1.1.134.6077</dc:relation> 
      <dc:relation>10.1.1.65.2144</dc:relation> 
      <dc:relation>10.1.1.54.7277</dc:relation> 
      <dc:relation>10.1.1.48.5282</dc:relation> 
     </oai_dc:dc> 
     </metadata> 
    </record> 
    <resumptionToken>10.1.1.1.2041-1547151-500-oai_dc</resumptionToken> 
    </ListRecords> 
</OAI-PMH> 

私はにJaxenを使用しています私のユースケースでは、それはApacheの実装その後、はるかに高速だから。私はXML表現にW3C DOMを使用しています。

すべてのレコード引数を選択し、選択したノードで他のxpathを評価する必要があります(これは自分の処理アーキテクチャのために必要です)。 (この

選択識別子のテキスト値:私は必要なデータを取得するために、他のXPathを評価していますすべての選択したレコードのノード上で次に

/OAI-PMH/ListRecords/record 

私はすべてのレコードのノード(この動作)を選択しています作品):

header/identifier/text() 

選択タイトルテキスト値(これは動作しません):

metadata/oai_dc:dc/dc:title/text() 

名前空間プレフィックスにURI(oai_dcとdc)を登録しました。私はまた、他のXPathを試みたが、それらのどれも動作しません:私はhttp://www.openarchives.org/」URIと接頭辞「OAI」を追加するのXPath、ネームスペースとソリューションに関する他のStackOverflowの質問を読んだ

metadata/dc/title/text() 
metadata//dc:title/text() 

OAI/2.0 /」を参照してください。私は、 "oai:"プレフィックスを定義されていないノードに追加しようとしましたが、結果としてレコードノードも選択しませんでした。私が間違っていることは何ですか?

ソリューション: 問題パーサー(感謝jasso)に関する問題がありました。名前空間を認識できるように設定されていませんでした。設定を変更した後は、すべて正常に動作します。

答えて

1

文書には{}OAI-PMH要素がなく、{http://www.openarchives.org/OAI/2.0/}OAI-PMH要素しかないため、XPath式/OAI-PMH/ListRecords/recordが何かを選択する可能性はありません。私が知っているのはhttp://jaxen.codehaus.org/faq.html

+0

です。それは私にとっても変です。私はすでにJaxen FAQを読んでいます - 助けてくれない – Daimon

+1

Kay博士と実際には同意できませんが、パーサーが名前空間を認識できるように設定されていないため、/ OAI-PMH/ListRecords/record'ドキュメントオブジェクトには名前空間ノードがありませんでした。次に、XPathの問題ではなく、実際にはパーサの問題になります。だからポイント:@Daimon、私たちにコードを示す; XMLを解析する方法、名前空間を登録する方法、およびXPath式を実行する方法について説明します。 – jasso

+0

ありがとうございました!問題は構文解析に関するものでした。パーサーは名前空間を認識できるように設定されていませんでした。 – Daimon