为什么通过属性访问提取XML字段值而不返回值?

时间:2015-09-20 05:23:57

标签: php xml simplexml

所以,我有这个XML:http://mkweb.bcgsc.ca/color_summarizer/?xml=1&url=http://i.imgur.com/I1phTe1.png&precision=extreme

我正在尝试提取rgb及其avg hex。所以在这种情况下,它将是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;

但是,它会返回空白。

我做错了什么?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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']:在XML文档中的任意位置找到variable元素,其属性name等于"rgb"
  • /statistic[@name='avg']:来自此类variable元素的查找子元素statistic,其属性name值等于"avg"
  • /hex:来自此类statistic元素,返回子元素hex