xpath:使用php从osm xml文件提取数据
我知道一点php,但我不是这里的专家…-不幸的是。。。所以这个问题需要你的建议:我试图从一个.Osm文件中提取一些数据。--您可以在overpass turbo上运行演示命令,我想将数据存储在数据库中-(或至少存储在excel文件中) 因此,在大量xml数据中,我有如下内容: “标签”:{ “地址:城市”:“巴塞罗那”, “地址:门牌号”:“1”, “地址:邮政编码”:“08022”, “地址:街道”:“卡雷尔·德托拉斯·普贾尔特”, “舒适性”:“医院”, “联系人:电子邮件:”info@clinicasagradafamilia.com", “联系人:传真”:“+34932124050”, “联系人:电话”:“+34932122300”, “联系人:网站”:“, “名称”:“Cliníca Sagrada Família”} 所以,问题是:如何存储所有这些价值观,我尝试了一些foreach,但没有成功。当然,我不知道为什么suposse是我们有一个迭代来获得所有的值,为什么不可能存储在一起 我听说我们可以在这里使用SimpleXMLElement::xpath来获取所有的值和相应的值。例如:xpath:使用php从osm xml文件提取数据,php,xpath,Php,Xpath,我知道一点php,但我不是这里的专家…-不幸的是。。。所以这个问题需要你的建议:我试图从一个.Osm文件中提取一些数据。--您可以在overpass turbo上运行演示命令,我想将数据存储在数据库中-(或至少存储在excel文件中) 因此,在大量xml数据中,我有如下内容: “标签”:{ “地址:城市”:“巴塞罗那”, “地址:门牌号”:“1”, “地址:邮政编码”:“08022”, “地址:街道”:“卡雷尔·德托拉斯·普贾尔特”, “舒适性”:“医院”, “联系人:电子邮件:”info@cl
> $raw = <<<EOF <root> { "type": "node", "id": 583257940, "lat":
> 41.4134446, "lon": 2.1426945, "tags": {
> "amenity": "hospital",
> "emergency": "yes",
> "name": "Clinica Delfos" } }, { "type": "node", "id": 618312181, "lat": 41.4138593, "lon": 2.1970778, "tags": {
> "addr:city": "Barcelona",
> "addr:housenumber": "211",
> "addr:postcode": "08020",
> "addr:street": "Carrer de Fluvià",
> "amenity": "hospital",
> "health_facility:type": "health_centre",
> "medical_system:western": "yes",
> "name": "CAP Sant Martí",
> "phone": "+93 307 07 66" } }, { "type": "node", "id": 876348001, "lat": 41.3841883, "lon": 2.1952253, "tags": {
> "amenity": "hospital",
> "emergency": "yes",
> "name": "Hospital del Mar",
> "website": "http://www.parcdesalutmar.cat/hospitals/hospital-del-mar/index.html",
> "wheelchair": "yes" } },
>
> </root> EOF; $xml = simplexml_load_string($raw);
>
> foreach($xml->xpath("//way") AS $way){
> $via = $way->xpath("tag[@k='name']/@v")[0];
> foreach($way->nd AS $nd){
> $idnode = $nd["ref"];
> echo $idnode .", ". $via ."<br>";
> } }
这意味着我必须在XML文档中的任何位置选择上述所有元素
标记[@k='name']选择k属性值等于name的当前上下文节点的子节点。然后,/@v从中返回v属性
最后,我必须获得以下数据集:
> "tags": {
> "addr:city": "Barcelona",
"addr:housenumber": "1",
"addr:postcode": "08022",
"addr:street": "Carrer de Torras i Pujalt",
"amenity": "hospital",
"contact:email": "info@clinicasagradafamilia.com",
"contact:fax": "+34 932124050",
"contact:phone": "+34 932122300",
"contact:website": "http://csf.com.es/",
"name": "Cliníca Sagrada Família" }
顺便说一句,你可以在立交桥涡轮运行一个演示命令
然后你会得到很多结果。。。。
问题:如何将这些结果存储在excel或mysql中
我真的很高兴收到你的来信
非常感谢
以及:
问题:这里如何使用SimpleXMLElement::xpath
XPath是用于XML的。这是文本数据,看起来像JSON结构。虽然XPath3.1有处理JSON结构化数据的函数,但PHP不支持通过XPath处理器处理JSON结构化数据
这意味着我必须在XML文档中的任何位置选择上述所有元素
在您的示例PHP代码中只有一个元素,
。您可以使用xpath/root
选择它,但这对您没有任何帮助,您仍然可以使用非结构化JSON-as-a-string
相反,它旨在解析JSON并将其转换为PHP变量。本页展示了几个示例,说明如何做到这一点
> "tags": {
> "addr:city": "Barcelona",
> "addr:housenumber": "1",
> "addr:postcode": "08022",
> "addr:street": "Carrer de Torras i Pujalt",
> "amenity": "hospital",
> "contact:email": "info@clinicasagradafamilia.com",
> "contact:fax": "+34 932124050",
> "contact:phone": "+34 932122300",
> "contact:website": "http://csf.com.es/",
> "name": "Cliníca Sagrada Família" }
> "tags": {
> "addr:city": "Barcelona",
"addr:housenumber": "1",
"addr:postcode": "08022",
"addr:street": "Carrer de Torras i Pujalt",
"amenity": "hospital",
"contact:email": "info@clinicasagradafamilia.com",
"contact:fax": "+34 932124050",
"contact:phone": "+34 932122300",
"contact:website": "http://csf.com.es/",
"name": "Cliníca Sagrada Família" }
"tags": { "addr:city": "Barcelona", "addr:housenumber": "1",
"addr:postcode": "08022", "addr:street": "Carrer de Torras i Pujalt",
"amenity": "hospital", "contact:email": "info@clinicasagradafamilia.com",
"contact:fax": "+34 932124050", "contact:phone": "+34 932122300",
"contact:website": "http://csf.com.es/", "name": "Cliníca Sagrada Família" }