【问题标题】:Extracting data from xpath reference of SimpleXMLElement Object从 SimpleXMLElement 对象的 xpath 引用中提取数据
【发布时间】:2013-03-06 05:27:18
【问题描述】:

我正在尝试将 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] 之类的数组进行访问,但这也不起作用。

【问题讨论】:

  • simpleXml 没有给你一个数组。你可以通过迭代对象来构建一个数组。
  • 尝试转换为字符串,即$results[$field] = (string)$u->$field;
  • 将其转换为字符串有效,谢谢!

标签: php xml xpath simplexml


【解决方案1】:

将 SimpleXMLElement 转换为字符串是一般的解决方案(有关规范问题,请参见 "Forcing a SimpleXML Object to a string, regardless of context"),对于包含所有 SimpleXMLElements 的完整数组,例如 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2010-12-31
    相关资源
    最近更新 更多