php - PHP通过Xml节点循环

标签 php xml xpath domdocument

我有Xml文件,例如

<response>
<tag1>
    <item>
        <id>106</id>
        <title>DG</title>
    </item>
    <item>
        <id>105</id>
        <title>AC</title>
    </item>
</tag1>
<tag2>
    <item>
        <id>1</id>
        <title>DjG</title>
    </item>
    <item>
        <id>15</id>
        <title>AoC</title>
    </item>
</tag2>
</response>


我尝试使用此代码提取ID和标题

$dom = new DomDocument();
    $dom->load('xml.xml');
    $xpath = new DOMXPath($dom);

    foreach($xpath->evaluate('//response/*') as $node){
    $params =$xpath->evaluate('//response/' .$node->nodeName . '/item/*');
        foreach($params as $child) {
            echo $node->nodeName ." = " .$child->nodeName ." = " .$child->nodeValue ."\n<br>";
        }
    }


但是我得到这样的结果

<br>tag1 = id = 106
<br>tag1 = title = DG
<br>tag1 = id = 105
<br>tag1 = title = AC
<br>tag2 = id = 1
<br>tag2 = title = DjG
<br>tag2 = id = 15
<br>tag2 = title = AoC


但是我需要这样


标签1 = 106 = DG
标签1 = 105 = AC
tag2 = 1 = DjG
tag2 = 15 = AoC

最佳答案

在第二个foreach上,仅以该$node->nodeName为目标,然后在内部的foreach目标上,每个ID都具有一个标题。

foreach($xpath->evaluate('//response/*') as $node) {
    $tag = $node->nodeName;
    $params = $xpath->evaluate("//$tag/*");
    foreach($params as $child) {
        $id = $xpath->evaluate('string(./id)', $child);
        $title = $xpath->evaluate('string(./title)', $child);
        echo $tag ." = " .$id ." = " .$title ."\n<br>";
    }
}


Sample Output

SimpleXML版本:

$xml = simplexml_load_file('xml.xml');
foreach($xml as $tag =>$node) {
    foreach($node as $item => $child) {
        echo $tag ." = " .$child->id ." = " .$child->title ."\n<br>";
    }
}


Sample Output

关于php - PHP通过Xml节点循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28065355/

相关文章:

php - 请勿对 WooCommerce 中的延期交货产品应用优惠券折扣

php - 根据用户输入更改 div 的内容?

xml - 多语言 sitemap.xml 文件

xpath - 如何解析以下html代码获取 "br"标签之前的所有文本

javascript - Python selenium-单击 javascript 链接不会加载新页面但会显示 url

php,xml从具有不同属性的标签输出整个值

php - 从 MySQLi 和 PHP 中的准备语句中获取数据

java - 如何从字符串创建元素

c# - 在反序列化期间忽略属性

javascript - 防止通过 jquery ajax 调用在浏览器中显示参数。