我在xml中获取数据。我想要遍历它。 当我打印 的var_dump($ video_xml-> playlist-> video-> labels->标签) 输出是
object(SimpleXMLElement)#41 (4) {
["@attributes"]=>
array(11) {
["id"]=>
string(1) "0"
["start"]=>
string(1) "0"
["end"]=>
string(17) "8.639527777777777"
["pos"]=>
string(12) "124,66,95,45"
["marker"]=>
string(5) "false"
["href"]=>
string(0) ""
["bold"]=>
string(5) "false"
["italic"]=>
string(5) "false"
["color"]=>
string(17) "rgb(62, 201, 106)"
["face"]=>
string(7) "Verdana"
["size"]=>
string(2) "24"
}
[0]=>
string(8) "Label1fg"
[1]=>
string(6) "Label0"
[2]=>
string(6) "Label0"
}
然而,当我在foreach循环中打印每个对象时,它会给出
object(SimpleXMLElement)#56 (1) {
["@attributes"]=>
array(11) {
["id"]=>
string(1) "0"
["start"]=>
string(1) "0"
["end"]=>
string(17) "8.639527777777777"
["pos"]=>
string(12) "124,66,95,45"
["marker"]=>
string(5) "false"
["href"]=>
string(0) ""
["bold"]=>
string(5) "false"
["italic"]=>
string(5) "false"
["color"]=>
string(17) "rgb(62, 201, 106)"
["face"]=>
string(7) "Verdana"
["size"]=>
string(2) "24"
}
}
我想像Label0一样打印对象值。 我怎么才能得到它。 我使用以下代码打印标签
foreach($video_xml->playlist->video->labels->label as $label){
var_dump($label);
}
我希望输出为: string(8)" Label1fg" string(6)" Label0" string(6)" Label0"
答案 0 :(得分:1)
SimpleXMLElement
对象的行为类似于对象,但实际上是系统RESOURCE(特别是libxml资源)。它的所有属性也是SimpleXMLElement
个对象。您需要将每个叶节点转换为期望的类型以获取原始值(strings,f.e。)。
foreach ($video_xml->playlist->video->labels->label as $label) {
var_dump((string)$label);
}
应该打印出你想要的东西。
如果XML文档的节点没有属性,并且您只使用它进行简单操作(从某些节点获取数据),使用json_encode()
/ {{3}的一种更简单的方法是使用它将它转换为多级数组:
// TRUE as the second argument to json_decode() to get back arrays, not objects
$video_data = json_decode(json_encode($video_xml), TRUE));
foreach ($video_data['playlist']['video']['labels']['label'] as $label) {
var_dump($label);
}
如果你没有将TRUE
作为第二个参数传递给json_decode()
,它会返回一个对象(stdClass
),你可以使用现有的代码来浏览它。
如果您必须使用XML文档结构,我认为使用json_decode()
和其他DOMElement
更容易。