0

我有一个这样的 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";
    }
}

到目前为止,我来到这里,我需要类似的东西

“属性 = 价值” “名称 = 约翰”

我的代码输出如下:

name
surname
age
blaa
john
wayne
33
blaa
4

2 回答 2

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

在线演示

这看起来类似于我从内存中知道的相关问答的属性文件(plist),所以它可能对你来说也很有趣:

于 2013-03-12T21:47:19.940 回答
1

我同意,一种奇怪的格式,但有效。鉴于 every<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 />";;
}  

---> 现场演示:http: //3v4l.org/0CS73

于 2013-03-12T21:31:04.987 回答