SimpleXML多维节点

时间:2013-03-12 21:13:49

标签: php xml simplexml

我有这样的XML:

<properties>
  <property>name</property><value>john</value>
  <property>surname</property><value>wayne</value>
  <property>age</property><value>33</value>
  <property>blaaa</property><value>blaa</value>
</properties>

我必须解析这个,我使用了这样的东西:

$xle = simplexml_load_file('xml.xml');
foreach ($xle->properties as $properties) {
    foreach ($properties->property as $property) {
        echo $property, "<br />\n";
    }
    foreach ($properties->value as $value) {
        echo $value, "<br />\n";
    }
}

到目前为止我来到这里,我需要像

这样的东西

“property = value”    “name = john”

我的代码输出如下内容:

name
surname
age
blaa
john
wayne
33
blaa

2 个答案:

答案 0 :(得分:2)

每个值都是跟随属性元素的兄弟。你可以很容易地用xpath表达它:

following-sibling::value[1]
如果<value>元素是上下文节点,

将为您提供<property>元素。

使用SimpleXML获取上下文节点非常简单,所以这里是示例PHP代码:

$properties = simplexml_load_file('xml.xml');

foreach($properties->property as $property)
{
    list($value) = $property->xpath('following-sibling::value[1]');
    echo $property, " = ", $value, "\n";
}

示例XML的输出是:

name = john
surname = wayne
age = 33
blaaa = blaa

Online Demo

这看起来类似于属性文件(plist),我从内存中知道了相关的Q&amp; A,所以它对你来说也许很有趣:

答案 1 :(得分:1)

我同意,这是一种奇怪的格式,但有效。鉴于每个<property>后跟<value>,请转到...

$xml = simplexml_load_file('xmlfile.xml');

$prop = $xml->xpath('//property');
$value = $xml->xpath('//value');

$count=count($prop)-1;

for ($i=0;$i<=$count;$i++) {
    echo $prop[$i].": ".$value[$i]."<br />";;
}  

---&GT;现场演示:http://3v4l.org/0CS73