2015-09-20 63 views
2

所以,我有這樣的XML:http://mkweb.bcgsc.ca/color_summarizer/?xml=1&url=http://i.imgur.com/I1phTe1.png&precision=extreme爲什麼通過屬性訪問提取XML字段值時不返回值?

我試圖提取rgbhexavg。所以在這種情況下,這將是d7dfe2

由於從這裏讀到:

enter image description here

這是我到目前爲止有:

$feed = file_get_contents("http://mkweb.bcgsc.ca/color_summarizer/?xml=1&url=http://i.imgur.com/I1phTe1.png&precision=extreme"); 
$xml = simplexml_load_string($feed); 
echo $xml->imgdata->variable[9]->statistic[0]->hex; 

然而,返回空白。

我在做什麼錯?

回答

0

您可以使用SimpleXMLElement::xpath()通過適當的XPath表達式來獲取目標文本:

$feed = file_get_contents("http://mkweb.bcgsc.ca/color_summarizer/?xml=1&url=http://i.imgur.com/I1phTe1.png&precision=extreme"); 
$xml = simplexml_load_string($feed); 
echo $xml->xpath("//variable[@name='rgb']/statistic[@name='avg']/hex")[0]; 

有關XPath表達式簡要說明:

  • //variable[@name='rgb']:找到variable元素,在XML文檔中的任何地方,有屬性name值等於"rgb"
  • /statistic[@name='avg']:從這樣的variable元素尋子元素statistic有屬性name值等於"avg"
  • /hex:從這樣statistic元素,返回子元素hex
+0

這就是...新的。謝謝,我不知道。 –

+0

但是爲什麼原始代碼'不工作'? simplexml不支持這種動態屬性和訪問嗎?或者使用的表單有錯誤,如果有的話? – user2864740

2
echo $xml->imgdata->variable[9]->statistic[0]->hex; 
      ^^^^^^^ 

是你要去的地方也錯了 - imgdata是根元素你的XML,所以你的$xml變量已經「指向」了。

echo $xml->variable[9]->statistic[0]->hex; 

- 這將得到你輸出d6dfe2


使用的var_dump代替echo將讓你

object(SimpleXMLElement)#2 (1) { 
    [0]=> 
    string(8) " 
d6dfe2 
" 
} 

- 所以你看,它仍然是一個SimpleXMLElement對象,節點值包含空格,它是原始的XML數據中存在。所以你可能想要額外地將其轉換爲字符串並修剪它,然後再進一步處理它:

trim((string)$xml->variable[9]->statistic[0]->hex)