nic*_*ckf 1 php xml xpath dom kml
我正在编写一个读取和操作KML(xml)文档的脚本.以下是我正在阅读的文件的片段:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated by Feature Manipulation Engine 2009 (Build 5658) -->
<kml xmlns="http://earth.google.com/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<name>South Australia</name>
<visibility>1</visibility>
<description><![CDATA[Statistical Local Area 2008]]></description>
<Folder id="kml_ft_SA_SLA08">
<name>SA_SLA08</name>
<Placemark id="kml_1">
<name>Mitcham (C) - West</name>
<Style>
<!-- style info blah blah -->
</Style>
<Polygon>
<!-- blah blah -->
</Polygon>
</Placemark>
<!-- snip lots more Placemarks -->
</Folder>
</Document>
</kml>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是使用XPath从中选择任何东西!
$doc = new DOMDocument();
$doc->load('myfile.xml'); // returns true
$xp = new DOMXPath($doc);
$places = $xp->query("//Placemark");
echo $places->length; // --> 0 ??!!??
$everything = $xp->query("//*"); // (so I know that the XPath isn't fully borked)
echo $everything->length; // --> 2085
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
<?php
$doc = new DOMDocument();
$doc->load('file.xml'); // returns true
$xp = new DOMXPath($doc);
$xp->registerNamespace('ge', 'http://earth.google.com/kml/2.2');
$places = $xp->query("//ge:Placemark");
echo $places->length; // --> 0 ??!!??
$everything = $xp->query("//*"); // (so I know that the XPath isn't fully borked)
//echo $doc->saveXML();
Run Code Online (Sandbox Code Playgroud)
显然你必须注册'ge'命名空间并查询它,至少这是我在谷歌搜索几分钟后想出来的.我想有时候我们会忘记我们正在处理命名空间:p
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |