从SimpleXMLElement对象的xpath引用中提取数据

时间:2013-03-06 05:27:18

标签: php xml xpath simplexml

我正在尝试将XML文件读入数组,但我遇到了一些麻烦。这是我的代码到目前为止的样子:

 $inst = new SimpleXMLElement($xml);
 foreach( $inst->xpath("record[@id='" . $range . "']") as $u ) {
      foreach($fields as $field) {
          $results[$field] = $u->$field;
      }
 }

但是当我print_r($results)时,这就是输出的内容:

Array
(
[field1] => SimpleXMLElement Object
    (
        [0] => field1Data
    )

[field2] => SimpleXMLElement Object
    (
        [0] => field2Data
    )

[field3] => SimpleXMLElement Object
    (
        [0] => field3Data
    )
)

如何直接从SimpleXMLElement Object获取数据并将其存储在数组中而不是将其存储在数组中?我尝试将其作为$u->$field[0]之类的数组进行访问,但这也无效。

1 个答案:

答案 0 :(得分:0)

将SimpleXMLElement转换为字符串是一般解决方案(有关规范问题,请参阅"Forcing a SimpleXML Object to a string, regardless of context"),包含SimpleXMLElement返回的所有xpath()的完整数组,或者您创建它你自己的常用方法是将数组映射到trim

$results = array_map('trim', $results);

strval

$results = array_map('strval', $results);

例如:

$inst    = new SimpleXMLElement($xml);
list($u) = $inst->xpath("record[@id='" . $range . "']")
foreach ($fields as $field) {
    $results[$field] = $u->$field;
}

$results = array_map('strval', $results);