1

我的 XML 文件如下:

<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>

我无法获得 Projectinformation 的子笔记。我想获取详细信息和项目边界的所有属性。这件事在 Java 中很容易,但我不知道如何用 php 来做。我获取项目信息子注释的代码如下:

$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>";
}
4

2 回答 2

0

您应该使用 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 ";
}

作为更通用的答案,您可以使用:

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

如评论中所述,您也可以使用xpath 。

于 2013-09-17T10:06:44.767 回答
0

试试这个。

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

foreach ($x->childNodes as $nodename) {
    if( $nodename->nodeName == 'FileHeader' ){
        echo $nodename->nodeName. " - " . $nodename->nodeValue."<br>";
    }
}

在哪里$nodename->nodeName保存所有子节点名称,例如FileHeader, Details, etc.

于 2013-09-17T09:58:42.413 回答