PHP XML解析之DOMDocument 方法实例讲解

本文介绍了一种使用PHP解析特定XML结构的方法。通过DOMDocument类解析XML文件,并获取节点属性及值。演示了如何遍历中间节点及其子节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML文件(test.xml):

<?xml version="1.0" encoding="utf-8"?>
<large id="china">
    <middle>
        <middleClass id="shanxi">陕西</middleClass>
        <small>
            <smallClass id="xian">西安</smallClass>
            <smallClass id="xianyang">咸阳</smallClass>
        </small>
    </middle>
    <middle>
        <middleClass id="hunan">湖南</middleClass>
        <small>
            <smallClass id="changsha">长沙</smallClass>
            <smallClass id="zhuzhou">株洲</smallClass>
        </small>
    </middle>
</large>

 

PHP代码:

<?php
// 首先要建一个DOMDocument对象   
$xml = new DOMDocument();
  
// 加载Xml文件   
$xml->load("d:/test.xml");
  
// 获取所有的middle标签   
$middleDom = $xml->getElementsByTagName("middle");

// 循环遍历middle标签   
foreach($middleDom as $middle){
    // 获取middleClass标签Node
    $middleClass = $middle->getElementsByTagName("middleClass");
    /**  
     * 要获取middleClass标签的Id属性要分两部走  
     * 1. 获取middleClass中所有属性的列表也就是$middleClass->item(0)->attributes  
     * 2. 获取middleClass中id的属性,因为其在第一位所以用item(0)  
     *
     * 若取属性的值可以用item(*)->nodeValue  
     * 若取属性的标签可以用item(*)->nodeName  
     * 若取属性的类型可以用item(*)->nodeType  
     */  
    echo "middleClass Id: " . $middleClass->item(0)->attributes->item(0)->nodeValue . "<br />";
    echo "middleClass value: " . $middleClass->item(0)->nodeValue . "<br />";

    // 获取该middle下所有的small标签   
    $smallDom = $middle->getElementsByTagName("small");
    // 循环遍历small标签   
    foreach($smallDom as $small){
       //获取smallClass标签Node
       $smallClass = $small->getElementsByTagName("smallClass");
       echo "   smallClass Id: " . $smallClass->item(0)->attributes->item(0)->nodeValue . "<br />";
       echo "   smallClass value: " . $smallClass->item(0)->nodeValue . "<br />";
       echo "   smallClass Id: " . $smallClass->item(1)->attributes->item(0)->nodeValue . "<br />";
       echo "   smallClass value: " . $smallClass->item(1)->nodeValue . "<br />";
    }
}

echo "<br>";
// 获取所有的small标签   
$smallDom = $xml->getElementsByTagName("small");
foreach($smallDom as $small){
   //获取smallClass标签Node
   $smallClass = $small->getElementsByTagName("smallClass");
   echo "smallClass Id: " . $smallClass->item(0)->attributes->item(0)->nodeValue . "<br />";
   echo "smallClass value: " . $smallClass->item(0)->nodeValue . "<br />";
   echo "smallClass Id: " . $smallClass->item(1)->attributes->item(0)->nodeValue . "<br />";
   echo "smallClass value: " . $smallClass->item(1)->nodeValue . "<br />";
}
?>


代码执行结果:

middleClass Id: shanxi
middleClass value: 陕西
   smallClass Id: xian
   smallClass value: 西安
   smallClass Id: xianyang
   smallClass value: 咸阳
middleClass Id: hunan
middleClass value: 湖南
   smallClass Id: changsha
   smallClass value: 长沙
   smallClass Id: zhuzhou
   smallClass value: 株洲

smallClass Id: xian
smallClass value: 西安
smallClass Id: xianyang
smallClass value: 咸阳
smallClass Id: changsha
smallClass value: 长沙
smallClass Id: zhuzhou
smallClass value: 株洲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值