Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xpath:使用php从osm xml文件提取数据_Php_Xpath - Fatal编程技术网

xpath:使用php从osm xml文件提取数据

xpath:使用php从osm xml文件提取数据,php,xpath,Php,Xpath,我知道一点php,但我不是这里的专家…-不幸的是。。。所以这个问题需要你的建议:我试图从一个.Osm文件中提取一些数据。--您可以在overpass turbo上运行演示命令,我想将数据存储在数据库中-(或至少存储在excel文件中) 因此,在大量xml数据中,我有如下内容: “标签”:{ “地址:城市”:“巴塞罗那”, “地址:门牌号”:“1”, “地址:邮政编码”:“08022”, “地址:街道”:“卡雷尔·德托拉斯·普贾尔特”, “舒适性”:“医院”, “联系人:电子邮件:”info@cl

我知道一点php,但我不是这里的专家…-不幸的是。。。所以这个问题需要你的建议:我试图从一个.Osm文件中提取一些数据。--您可以在overpass turbo上运行演示命令,我想将数据存储在数据库中-(或至少存储在excel文件中)

因此,在大量xml数据中,我有如下内容:

“标签”:{ “地址:城市”:“巴塞罗那”, “地址:门牌号”:“1”, “地址:邮政编码”:“08022”, “地址:街道”:“卡雷尔·德托拉斯·普贾尔特”, “舒适性”:“医院”, “联系人:电子邮件:”info@clinicasagradafamilia.com", “联系人:传真”:“+34932124050”, “联系人:电话”:“+34932122300”, “联系人:网站”:“, “名称”:“Cliníca Sagrada Família”}

所以,问题是:如何存储所有这些价值观,我尝试了一些foreach,但没有成功。当然,我不知道为什么suposse是我们有一个迭代来获得所有的值,为什么不可能存储在一起

我听说我们可以在这里使用SimpleXMLElement::xpath来获取所有的值和相应的值。例如:

> $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" }