【发布时间】:2014-07-28 19:20:19
【问题描述】:
我正在尝试解析这样的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<gml:FeatureCollection
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:p="http://example.org">
<gml:featureMember>
<p:Point>
<gml:pointProperty>
<gml:Point srsName="epsg:4258">
<gml:pos>-3.84307585 43.46031547</gml:pos>
</gml:Point>
<gml:Point srsName="epsg:4258">
<gml:pos>-3.84299411 43.46018513</gml:pos>
</gml:Point>
<gml:Point srsName="epsg:4258">
<gml:pos>-3.84299935 43.45998723</gml:pos>
</gml:Point>
<!--
... many more <gml:Point> nodes ...
-->
<gml:Point srsName="epsg:4258">
<gml:pos>-3.84309913 43.46054546</gml:pos>
</gml:Point>
<gml:Point srsName="epsg:4258">
<gml:pos>-3.84307585 43.46031547</gml:pos>
</gml:Point>
</gml:pointProperty>
</p:Point>
</gml:featureMember>
</gml:FeatureCollection>
我想让gml:pos 的每一行保存到数据库,但目前我很高兴在 webpace 中打印它们 (echo...)
$output = simplexml_load_string($output);
$xml = $output->getNamespaces(true);
//print_r( $xml);
$xml_document = $output->children($xml["p"]);
foreach($xml_document->Point->children($xml["gml"]);
echo $xml_point->Point[0];
echo $xml->FeatureCollection;
}
在 $output 我有完整的 xml,gml:point 中的大量坐标
但我试图使用命名空间来达到目的,但我必须做错事,因为除了 Array word 之外我无法打印任何内容(即使使用 print_r...)
【问题讨论】:
-
那是你的 XML 源吗?它似乎没有很好地形成。它不会解析。
-
我更改了 xml。现在我设置了一个完整的。前一个被修改只是为了包括几点。这个 xml 是我从网络服务收到的
-
顺便说一句,如果您仍然依赖文档中的前缀(由
getNamespaces(true)提供),您可以直接将它们与->children("p", true)一起使用。最好用实际的命名空间 URI 定义自己的数组或常量集,以防生成 XML 的代码在将来发生变化并选择具有相同含义的不同前缀。