2013-03-07 37 views
0

我在XML中有很多很多的paragraph元素,在這些段落裏面經常有子元素,比如name。我想運行一個xpath,它將返回子元素的值和父段落的xml:id。理想的結果是某種數組,其中鍵是paragraph元素的xml:id,值是子元素name的文本節點。任何想法如何我可以用一個單一的xpath完成這個?返回一對值的xpath(使用php)

目前,我正在嘗試類似的事情,涉及兩個xpaths,並試圖將兩者放在一起,但這是變得非常混亂,不工作。

$result_array = array(); 
    $xmldoc = simplexml_load_file("$fullfilename"); 
    $xmldoc->registerXPathNamespace("tei", "http://www.tei-c.org/ns/1.0"); 
    $names = $xmldoc->xpath("//name"); 
foreach ($names as $name) 
{ 
    $pids = $xmldoc->xpath("//tei:p[tei:name='$name']/@xml:id") 
    $result_array[$name] = $pids[0] 
} 

我在這裏得到一個錯誤,說[$name]是非法抵消。我也只是不認爲這會給我想要的東西,因爲我相信它總是會返回xml:id的第一段,它的子值name元素的值與輸入相匹配。但我想要的是該段落中找到該實例的段落xml:id值。

感謝您的幫助。

+0

你爲什麼不嘗試https://code.google.com/p/phpquery/ ? – deadlock 2013-03-07 12:43:27

+0

請將您的XMl添加到問題中 – JWiley 2013-03-07 13:07:15

+0

嘗試更改'「// tei:p [tei:name ='$ name']/@ xml:id」'to'「// tei:p [tei:name = 「+ $ name」+「]/@ xml:id」' – JWiley 2013-03-07 13:16:28

回答

0

的SimpleXMLElement :: XPath返回的SimpleXMLElement對象的數組或FALSE在發生錯誤的情況下。

這意味着您使用SimpleXMLElement對象作爲您的數組鍵,因此非法偏移的錯誤。

爲了讓使用它作爲重點的真正價值,將其轉換爲字符串如下:

$result_array[(string) $name] = $pids[0];