2012-05-07 247 views
2

我是使用xml和xsd工作的新手。我想用暴食來創建Web服務客戶端:PHP Web服務客戶端:Guzzle和xsd

http://guzzlephp.org/index.html

我能夠創建一個非常基本的客戶端和1個指令以下這個教程:

http://guzzlephp.org/tour/building_services.html

的問題,我有如何讓返回的XML變成更有用的格式。我使用的Web服務(和它的文檔和XSD),可以在這裏找到:

http://www.epo.org/searching/free/ops.html

我得到一個SimpleXMLElement。假設以下XML內容:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="/2.6.2/style/exchange.xsl"?> 
<ops:world-patent-data xmlns:ops="http://ops.epo.org" xmlns="http://www.epo.org/exchange" xmlns:ccd="http://www.epo.org/ccd" xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <ops:meta name="elapsed-time" value="30"/> 
    <exchange-documents> 
     <exchange-document system="ops.epo.org" family-id="19768124" country="EP" doc-number="1000000" kind="A1"> 
      <bibliographic-data> 
       <publication-reference> 
        <document-id document-id-type="docdb"> 
         <country>EP</country> 
         <doc-number>1000000</doc-number> 
         <kind>A1</kind> 
         <date>20000517</date> 
        </document-id> 
        <document-id document-id-type="epodoc"> 
         <doc-number>EP1000000</doc-number> 
         <date>20000517</date> 
        </document-id> 
       </publication-reference> 
       <!-- a lot of content snipped --> 
      </bibliographic-data> 
     </exchange-document>   
    </exchange-documents> 
</ops:world-patent-data> 

我該如何非常簡單地提取doc-number(在上面的XML的第11行)?

我想:它

$xpath = '/ops:world-patent-data/exchange-documents/exchange-document/bibliographic-data/publication-reference/document-id/doc-number'; 
$data = $result->xpath($xpath); 

和變化,但$的數據始終是空數組。

回答

1

我相信你的問題與使用命名空間前綴有關。我會做什麼(作爲最佳做法)是確保在寫入我的xpath之前註冊我自己的前綴和名稱空間。這樣,我會使用由我控制的前綴。

PHP有一個奇怪的(在我看來)處理這種方式,因爲它允許「默認」的方式,即試圖自行解決前綴。在你的情況下,由於xmlns="http://www.epo.org/exchange",此路徑exchange-documents/exchange-document/bibliographic-data/publication-reference/document-id/doc-number中的標籤實際上是合格的。如果你要爲這個命名空間註冊一個前綴,並在你的XPath中使用它,我相信你的東西會起作用。

看看這個PHP help topic更多地瞭解它...

+0

跟着鏈接並補充說:$ result-> registerXPathNamespace( '交流', 'http://www.epo.org/exchange' );路徑//交換:書目數據/出版物參考/文檔編號/文檔編號不起作用,但只是使用// exchange:doc-number作爲Marc B建議的作品。我很困惑......編輯:好的第一條路徑必須是//交換:書目數據/交換:出版物參考/交換:文檔編號/交換:文件編號。現在有意義,我想到它,但有點詳細... –

+0

你還應該看看[Symfony2的CssSelector組件](http://symfony.com/doc/current/components/css_selector.html)它是用來生成XPath爲你。希望這可以幫助。 – renoirb

1

XPath允許這樣的:

//document-id 

這將返回所有document-id節點,無論他們在哪裏DOM。除非您確實需要確定某物的位置,否則不必指定絕對的/.../.../.../類型路徑。