所以,我有这个XML:http://mkweb.bcgsc.ca/color_summarizer/?xml=1&url=http://i.imgur.com/I1phTe1.png&precision=extreme
我正在尝试提取rgb
及其avg
hex
。所以在这种情况下,它将是d7dfe2
从这里读到:
这是我到目前为止所做的:
$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 :(得分: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