如何使用php

时间:2017-06-07 06:57:37

标签: php xml

我在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"

1 个答案:

答案 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更容易。