2011-05-08 163 views
2

所以,我使用CakePHP獲取parentnode用XPath查詢和我有一個XML文件,它看起來是這樣的:介紹CakePHP

<something> 
<table id="t1"> 
    <columns> 
    <column id="c1"/> 
    <column id="c2"/> 
    </columns> 
</table> 
<table id="t2"> 
    <columns> 
...... 
</something> 

我是用設置::提取物來搜索基於列在它的身份證,沒有問題,那一個:

Set::extract("/something/table/columns/column[id=$column_id"]", $array); 

現在我需要得到該列的父表。我嘗試使用Set和SimpleXMLElement,但無濟於事。

有人可以幫助我嗎?感謝

+0

好問題,+1。請參閱我的答案,瞭解不使用任何反向軸的完整且簡短的XPath解決方案。 :) – 2011-05-08 21:24:33

回答

0

使用

Set::extract("/something/table[columns/column[id=$column_id"]]", $array); 

XPath表達式

/something/table[columns/column[id=$column_id"]] 

選擇所有table元件是頂部元件something的兒童和具有一個columns/column grand-子元素的字符串值爲id小孩等於變量$column_id的字符串值。

+0

我不太瞭解XPath,但理論上它可能會起作用。它只是沒有Set :: extract 它給了我一個空的數組。 – peugas55 2011-05-08 21:52:20

+0

@ peugas55:嘗試使用SimpleXMLElement :: xpath – 2011-05-08 22:04:55

+0

@ peugas55:我不知道PHP及其使用的XPath引擎或其API。如果這個XPath表達式「不起作用」,那麼你的問題不是關於XPath,而是關於這個特定的XPath實現。我可以提供一個完整的XSLT代碼示例,確認我的答案中的XPath表達式選擇了想要的元素 - 是否要我這樣做? – 2011-05-08 22:06:02