PHP简单的XML到数组 - 减去字符问题

时间:2011-03-21 19:41:20

标签: php xml simplexml special-characters

我有一个包含数据的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>

我收到此错误:

注意:使用未定义的常量网址 - 在 C:\ wamp \ www \ concepts \ xml-to-array \ index.php中假定为'url'在线 11

它不喜欢 minus 字符。我怎么得到它?

3 个答案:

答案 0 :(得分:8)

解决方案是使用以下内容:

$result[0]->{'image-url'}
对于带有连字符的所有属性,

等等。

答案 1 :(得分:-1)

我喜欢使用:

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

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

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

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

答案 2 :(得分:-1)

$arr = json_decode( json_encode($simple) , 1);

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

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

将“price”作为空子阵列返回

[price] => Array
    (
    )