2015-09-20 67 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)