为什么通过 属性 访问提取 XML 字段值不返回值?
Why is extracting an XML field value by property access not returning a value?
所以,我有这个 XML:http://mkweb.bcgsc.ca/color_summarizer/?xml=1&url=http://i.imgur.com/I1phTe1.png&precision=extreme
我正在尝试提取 hex
的 rgb
及其 avg
。所以在这种情况下,它将是 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;
然而,它returns空白。
我做错了什么?
您可以使用 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
元素中找到具有属性 name
值等于 "avg"
的子元素 statistic
/hex
: 从这样的 statistic
元素, return 子元素 hex
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:
trim((string)$xml->variable[9]->statistic[0]->hex)
所以,我有这个 XML:http://mkweb.bcgsc.ca/color_summarizer/?xml=1&url=http://i.imgur.com/I1phTe1.png&precision=extreme
我正在尝试提取 hex
的 rgb
及其 avg
。所以在这种情况下,它将是 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;
然而,它returns空白。
我做错了什么?
您可以使用 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
元素中找到具有属性name
值等于"avg"
的子元素 /hex
: 从这样的statistic
元素, return 子元素hex
statistic
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:
trim((string)$xml->variable[9]->statistic[0]->hex)