2011-05-31 86 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> 

我因爲在我的使用情況下,它的速度更快,然後執行的Apache使用Jaxen的。我使用W3C DOM來表示XML。

我需要選擇所有記錄參數,然後在選定的節點上評估其他xpath(因爲我的處理架構而需要它)。

我選擇的所有記錄節點(這工作):

/OAI-PMH/ListRecords/record 

然後我評估其他的XPath獲得所需的數據每個選定的記錄節點上:

選擇標識符文本值(此作品):

header/identifier/text() 

選擇標題文本值(不工作):

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

我已經註冊了名稱空間前綴及其URI(oai_dc和dc)。我也嘗試過其他的XPath但他們沒有工作:

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

我讀過有關的XPath,命名空間和解決其他問題計算器加前綴「OAI」與URI「http://www.openarchives.org/ OAI/2.0 /」。我試圖向沒有定義前綴的節點添加「oai:」前綴,但結果我甚至沒有選擇記錄節點。任何想法我做錯了什麼?

解決方案: 問題是有關解析器(謝謝jasso)。它沒有設置爲名稱空間感知 - 更改設置後,一切正常,如預期。

回答

1

我看不出XPath表達式/OAI-PMH/ListRecords/record都不可能選擇任何內容,因爲您的文檔沒有一個{}OAI-PMH元素,只有一個{http://www.openarchives.org/OAI/2.0/}OAI-PMH元素。見http://jaxen.codehaus.org/faq.html

+0

我知道,這對我來說也很奇怪。我已經閱讀過Jaxen常見問題解答 - 對我沒有幫助 – Daimon 2011-05-31 21:19:59

+1

我不能不同意Dr. Kay,但是如果解析器沒有設置爲名稱空間,並且因此'/ OAI-PMH/ListRecords/record'可以選擇某些東西文檔對象沒有任何名稱空間節點。再次,在這種情況下,這實際上是一個解析器問題,而不是XPath問題。所以重點是:@Daimon,向我們展示代碼;如何解析XML,如何註冊名稱空間以及如何執行XPath表達式。 – jasso 2011-05-31 21:28:14

+0

謝謝jasso!問題是關於解析 - 解析器沒有設置爲名稱空間感知。 – Daimon 2011-05-31 21:43:05