【发布时间】:2021-03-07 04:38:06
【问题描述】:
我正在尝试访问我的 XML 的子属性。
这是我的 XML:
<csw:GetRecordByIdResponse xmlns:csw="http://www.opengis.net/cat/csw/2.0.2">
<csw:Record>
<dc:identifier xmlns:dc="http://purl.org/dc/elements/1.1/">8b511d58-5be8-4281-b932-5954dde667cd</dc:identifier>
<dc:title xmlns:dc="http://purl.org/dc/elements/1.1/">Temperature dalle stazioni meteorologiche siciliane</dc:title>
<dc:type xmlns:dc="http://purl.org/dc/elements/1.1/">dataset</dc:type>
<dc:subject xmlns:dc="http://purl.org/dc/elements/1.1/">temperatura</dc:subject>
<dc:subject xmlns:dc="http://purl.org/dc/elements/1.1/">sicilia</dc:subject>
<dc:subject xmlns:dc="http://purl.org/dc/elements/1.1/">environment</dc:subject>
<dct:abstract xmlns:dct="http://purl.org/dc/terms/">Dataset delle misurazioni effettuate dalle stazioni meteorologiche distribuite sul territorio della regione Sicilia in merito alla temperatura. Le misurazioni sono registrate con una frequenza di 5 minuti.</dct:abstract>
<dc:description xmlns:dc="http://purl.org/dc/elements/1.1/">Dataset delle misurazioni effettuate dalle stazioni meteorologiche distribuite sul territorio della regione Sicilia in merito alla temperatura. Le misurazioni sono registrate con una frequenza di 5 minuti.</dc:description>
<dc:rights xmlns:dc="http://purl.org/dc/elements/1.1/">copyright</dc:rights>
<dc:rights xmlns:dc="http://purl.org/dc/elements/1.1/">otherRestrictions</dc:rights>
<dc:language xmlns:dc="http://purl.org/dc/elements/1.1/">ita</dc:language>
<ows:BoundingBox xmlns:ows="http://www.opengis.net/ows" crs="urn:ogc:def:crs:EPSG:6.6:4326">
<ows:LowerCorner>15.5877 36.3799</ows:LowerCorner>
<ows:UpperCorner>11.5864 38.979</ows:UpperCorner>
</ows:BoundingBox>
<dc:URI xmlns:dc="http://purl.org/dc/elements/1.1/" protocol="OGC:WMS" name="Temperature stazioni siciliane 2015-05-01" description="Servizio di visualizzazione WMS">http://localhost:8080/geoserver/ewas/wms?service=WMS&version=1.1.0&request=GetMap&layers=ewas%3Adeg_temperature_2015_05_01&bbox=2246931.5%2C4058390.75%2C2574061.5%2C4269145.5&width=768&height=494&srs=EPSG%3A3004&styles=&format=application/openlayers</dc:URI>
<dc:URI xmlns:dc="http://purl.org/dc/elements/1.1/" protocol="OGC:WMS" name="Sicilia comuni confini">http://localhost:8080/geoserver/ewas/wms?service=WMS&version=1.1.0&request=GetMap&layers=ewas%3Asicilia_comuni&bbox=2244086.25%2C4054129.25%2C2578859.75%2C4297079.5&width=768&height=557&srs=EPSG%3A3004&styles=&format=application/openlayers</dc:URI>
</csw:Record>
</csw:GetRecordByIdResponse>
我目前正在使用 PHP 中的以下代码访问子节点:
$xml = simplexml_load_string($response);
$parsercsw = $xml->children('csw', true);
$identifier = $parsercsw->Record->children('dc', true);
$json = json_encode($identifier);
$array = json_decode($json,TRUE);
在$response我有上面的XML,然后我用$parsercsw = $xml->children('csw', true);首先访问csw子节点,然后用$identifier = $parsercsw->Record->children('dc', true);访问csw:Record下的所有dc节点。
最后使用 json_encode 和 json_decode 创建我的 PHP 数组,然后我可以获取所有 dc 节点值。
如果我打印 $array 值,我将得到以下结果:
print_r($array);
Array
(
[identifier] => 8b511d58-5be8-4281-b932-5954dde667cd
[title] => Temperature dalle stazioni meteorologiche siciliane
[type] => dataset
[subject] => Array
(
[0] => temperatura
[1] => sicilia
[2] => environment
)
[description] => Dataset delle misurazioni effettuate dalle stazioni meteorologiche distribuite sul
territorio della regione Sicilia in merito alla temperatura. Le misurazioni sono registrate con una frequenza di 5 minuti.
[rights] => Array
(
[0] => copyright
[1] => otherRestrictions
)
[language] => ita
[URI] => Array
(
[0] => http://localhost:8080/geoserver/eWAS/wms?service=WMS&version=1.1.0&request=GetMap&layers=eWAS%3Adeg_temperature_2015_05_01&bbox=2246931.5%2C4058390.75%2C2574061.5%2C4269145.5&width=768&height=494&srs=EPSG%3A3004&styles=&format=application/openlayers
[1] => http://localhost:8080/geoserver/eWAS/wms?service=WMS&version=1.1.0&request=GetMap&layers=eWAS%3Asicilia_comuni_confini&bbox=2244086.25%2C4054129.25%2C2578859.75%2C4297079.5&width=768&height=557&srs=EPSG%3A3004&styles=&format=application/openlayers
)
)
通过这种方式,我可以访问我需要的所有值:
$uri = $array["URI"];
我的问题是我还想在 XML 中读取 dc:URI 的属性“名称”,但我不知道如何做到这一点,我尝试了不同的方法,但没有一种方法有效。 有人可以帮帮我吗?谢谢
【问题讨论】:
-
在将其编码为 JSON 之前,您可能必须使用 php.net/manual/en/simplexmlelement.attributes.php,并自己构建所需的结果数据结构。
-
任何支持 xpath 的东西都是一个好的开始。
-
@CBroe 或者只是不要使用可怕的 JSON hack。 JSON 和 PHP 数组都不是表示和使用 XML 的好方法;这就是 SimpleXML 存在的原因。
标签: php xml xml-parsing simplexml