【发布时间】:2014-05-23 00:15:45
【问题描述】:
我正在使用 SimpleXML 浏览一个 kml 文档,并且我正在处理一个需要按特定顺序检索属性的项目。
如果我有这样的事情:
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#mizipirs">
<SimpleData name="ZCTA5CE10">55555</SimpleData>
<SimpleData name="GEOID10">55555</SimpleData>
<SimpleData name="CLASSFP10">XX</SimpleData>
<SimpleData name="MTFCC10">XXXXX</SimpleData>
<SimpleData name="FUNCSTAT10">X</SimpleData>
<SimpleData name="ZIPNUMERIC">XXXXX</SimpleData>
<SimpleData name="ALAND10">XXXX</SimpleData>
<SimpleData name="AWATER10">XXXX</SimpleData>
<SimpleData name="INTPTLAT10">XX.XXXX</SimpleData>
<SimpleData name="INTPTLON10">XX.XXXX</SimpleData>
<SimpleData name="ZIPcode">XXXXX</SimpleData>
<SimpleData name="AreaName">XXXXX</SimpleData>
<SimpleData name="TaxYear">XXXXX</SimpleData>
<SimpleData name="numreturns">XXX</SimpleData>
<SimpleData name="numjointre">XXX</SimpleData>
<SimpleData name="avg_agi">XXX</SimpleData>
</SchemaData></ExtendedData>
<Polygon><outerBoundaryIs><LinearRing><coordinates>[lots of lat/lng data here removed for everyone's own convenience]</coordinates></LinearRing></outerBoundaryIs></Polygon>
</Placemark>
所以,如果我想访问 name = "ZIPcode" 的 SimpleData 值 - 有没有办法可以做到这一点?我在这个文档中有很多 <Placemark>,所以我不能使用 xpath,尽管我什至不确定如何基于属性使用 Xpath。也许这是一个选择?
编辑
我喜欢这样的东西:
if(isset($xml->Document->Folder->Placemark)){
foreach($xml->Document->Folder->Placemark as $place) {
$zip = $place->xpath('//SchemaData/SimpleData[@name="ZIPcode"]/text()');
}
}
所需的效果是它会提取具有“ZIPcode”属性的 SimpleData 元素的值,并且它会为每个 Placemark 元素执行此操作。但我无法让这段代码返回任何内容。
XML 中遗漏了一些结构,但我留下了必要的部分。如果我把所有东西都留在里面,这将是一个更大的文档。
【问题讨论】: