【问题标题】:PHP simple XML to array - minus character problemPHP简单的XML到数组 - 减去字符问题
【发布时间】:2011-03-21 19:41:20
【问题描述】:

我有一个包含数据的 XML 文件并运行以下代码:

<?php
$xml = simplexml_load_file("index.xml");
$result = $xml->xpath("product");

echo $result[0]->name . '<br />';
echo $result[0]->price . '<br />';
echo $result[0]->info-url . '<br />';
echo $result[0]->image-url . '<br />';
echo $result[0]->longdescription . '<br />';
?>

我的 XML 文件的一部分

<product>
  <name>Test</name>
  <price>100</price>
  <info-url>http://www.test.com</info-url>
  <image-url>http://www.test.com/image.jpg</image-url>
</product>

我收到此错误:

"注意:使用未定义的常量 url - 在 C:\wamp\www\concepts\xml-to-array\index.php 中假定为“url” b> 11

它不喜欢 减号 字符。如何获得?

【问题讨论】:

标签: php xml simplexml special-characters


【解决方案1】:

解决方案是使用以下方法:

$result[0]->{'image-url'}

所有带有连字符的属性以此类推。

【讨论】:

    【解决方案2】:
    $arr = json_decode( json_encode($simple) , 1);
    

    看起来很简单,但会生成错误的数组,例如

    <product>
      <name>Test</name>
      <price/>
    </product>
    

    将“价格”作为空子数组返回

    [price] => Array
        (
        )
    

    【讨论】:

      【解决方案3】:

      我喜欢使用 xpath,而不是 xpath:

      $url = "filename.xml";
      $simple = simplexml_load_file($url);
      $arr = json_decode( json_encode($simple) , 1);
      

      然后我可以通过以下方式访问元素:

      echo $arr['product']['image-url'];
      

      根据评论,这很浪费,但是我宁愿牺牲几千字节的内存/几微秒的处理时间,以获得更清洁的导航方式并显着提高代码可读性。尤其是涉及深度嵌套的 xml 文件时。

      【讨论】:

      • 编解码是浪费内存。 SimpleXML 库提供了对数据的充分访问(@Mike Lewis 回答)
      • @Minimihi - 库提供了对数据的充分访问,但返回的格式不直观。因此,我宁愿牺牲几千字节的内存/几微秒的处理时间,以获得更清洁的导航方式和代码可读性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多