如何在php中循环一个特定的XML内容?

hs1rzwqc  于 2023-01-08  发布在  PHP
关注(0)|答案(2)|浏览(93)

我有一个XML格式的回复,我需要在PHP中循环浏览内容。由于我是XML新手,我尝试了一下,但没有找到任何解决方案。有人能帮忙吗?

<?php
$xmlstring=<<<XML
<?xml version="1.0" encoding="utf-8"?>
<v-ov version="1.0">
<object vk="1" model="top">
<field type="BigIntegerField" name="bolpo">678</field>
<field name="pdop">
<object wk="1" model="stage">
<field type="DateTimeField" name="updated_on">10 Dec, 2020, 10:00 </field>
</object>
<object wk="2" model="stage">
<field type="DateTimeField" name="updated_on">11 Dec, 2020, 10:00 </field>
</object>
</field>
</object>
</v-ov>
XML;

$xpath = new SimpleXMLElement($xmlstring);
$node = $xpath->xpath('/object[@model="top"]/field[@name="pdop"]/object');
print_r($node);
nbysray5

nbysray51#

您的xpath在选择对象节点时稍有偏差,在XML根节点处有一个<v-ov>节点,但您的xpath以单斜杠开头,因此xpath将<object>指定为根节点。
如果你改变你的xpath在开始处包含一个双斜线,那么xpath引擎将在任何深度寻找节点,即://object[@model="top"]/field[@name="pdop"]/object
选中节点后,可以使用foreach迭代这些节点,以提取所需的任何值:

$xml_obj = new SimpleXMLElement($xmlstring);
$nodes = $xml_obj->xpath('//object[@model="top"]/field[@name="pdop"]/object');
foreach($nodes as $node) {
    print_r($node);
    
    //attribute values
    $model = $node['model'];
    $wk = $node['wk'];
    
    //node value
    $field = $node->field;
    
}

Example here: https://3v4l.org/MUL4o#v8.2.1

vu8f3i0k

vu8f3i0k2#

你可能需要一个嵌套循环来访问你的XML内容,这是一个简单的例子,我可以给予

<?php

$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<v-ov version="1.0">
<object vk="1" model="top">
<field type="BigIntegerField" name="bolpo">678</field>
<field name="pdop">
<object wk="1" model="stage">
<field type="DateTimeField" name="updated_on">10 Dec, 2020, 10:00 </field>
</object>
<object wk="2" model="stage">
<field type="DateTimeField" name="updated_on">11 Dec, 2020, 10:00 </field>
</object>
</field>
</object>
</v-ov>
XML;

$xml_obj = simplexml_load_string($xml);

foreach($xml_obj as $node) {
    print_r($node);
}

?>

相关问题