douzhuo1853 2013-09-17 09:50
浏览 60
已采纳

如何用php获取XML的标记名?

My XMLfile is as follows:

<Project>
  <ProjectInformation>
    <FileHeader>IDGIS_PROJECT</FileHeader>
    <Details ProjectID="0" ProjectName="" Description="" StartDate="02/05/2012 00:00:00 AM" OwnerShip="" LastModified="01/01/0001 00:00:00 AM" Datum="WGS_84" Projection="CYL" NoSignificantDecimals="3" ZoomCurrent="303601" RasterHeight="0" Background="-1">Project Details</Details>
    <ProjectBounds XMin="25.4579486950873" YMin="44.7183808936148" XMax="26.5953949808977" YMax="45.5345534542584" ExtentBounds="no">Bounds</ProjectBounds>
  </ProjectInformation>
  <Layers>
    <Layer ID="2" Description="" MinZoom="1" MaxZoom="1000000000" Visible="3" RemotHostType="LocalFile" RemotHost="" FolderName="Prahova_Highways" Path="" LayerStatus="ReadWrite">
</Layers>

I am unable to get child notes of Projectinformation. i want to get all attributes of Details and Project bounds. This thing is very easy in Java but i dunt know how to do it with php. My code for getting childnotes of projectinformation is as follows:

$xmlDoc = new DOMDocument();
$xmlDoc->load('oglPrahova/prahova.GIS');

$x=$xmlDoc->documentElement;
var_dump($x);

$x = $xmlDoc->->getElementsByTagName('ProjectInformation');  

foreach ($x->childNodes AS $item) {
    print $i->nodeName . " = " . $item->nodeValue . "<br>";
}
  • 写回答

2条回答 默认 最新

  • dsj2014 2013-09-17 10:06
    关注

    You should use SimpleXML :

    $xml = new SimpleXMLElement(
    '<Project>
        <ProjectInformation>
            <FileHeader>IDGIS_PROJECT</FileHeader>
            <Details ProjectID="0" ProjectName="" Description="" StartDate="02/05/2012 00:00:00 AM" OwnerShip="" LastModified="01/01/0001 00:00:00 AM" Datum="WGS_84" Projection="CYL" NoSignificantDecimals="3" ZoomCurrent="303601" RasterHeight="0" Background="-1">Project Details</Details>
            <ProjectBounds XMin="25.4579486950873" YMin="44.7183808936148" XMax="26.5953949808977" YMax="45.5345534542584" ExtentBounds="no">Bounds</ProjectBounds>
        </ProjectInformation>
        <Layers>
            <Layer ID="2" Description="" MinZoom="1" MaxZoom="1000000000" Visible="3" RemotHostType="LocalFile" RemotHost="" FolderName="Prahova_Highways" Path="" LayerStatus="ReadWrite" />
        </Layers>
    </Project>');
    
    foreach($xml->ProjectInformation->Details->attributes() as $key => $value)
    {
        echo "$key : $value ";
    }
    foreach($xml->ProjectInformation->ProjectBounds->attributes() as $key => $value)
    {
        echo "$key : $value ";
    }
    

    As a more generic answer, you can use :

    foreach($xml->ProjectInformation->children() as $child)
    {
        foreach($child->attributes() as $key => $value)
        {
            echo "$key : $value ";
        }
    }
    

    You can also use xpath, as said in a comment.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 怎样才能让鼠标沿着线条的中心线轨迹移动
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?