在php中使用属性过滤xml记录
我从API拉取请求中检索到一个文件,该文件如下所示:在php中使用属性过滤xml记录,php,xml,Php,Xml,我从API拉取请求中检索到一个文件,该文件如下所示: <?xml version="1.0" encoding="UTF-8"?> <osm version="0.6" generator="Osmosis SNAPSHOT-r26564" xapi:planetDate="2014-10-07T15:42:02Z" xmlns:xapi="http://jxapi.openstreetmap.org/"> <node id="251652819" versi
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Osmosis SNAPSHOT-r26564" xapi:planetDate="2014-10-07T15:42:02Z" xmlns:xapi="http://jxapi.openstreetmap.org/">
<node id="251652819" version="6" timestamp="2013-10-19T14:03:10Z" uid="1198089" user="GeorgeKaplan" changeset="18434238" lat="48.8527413" lon="2.3333559">
<tag k="dispensing" v="yes"/>
<tag k="website" v="http://www.pharmacie-paris-citypharma.fr/"/>
<tag k="name" v="Pharmacie Citypharma"/>
<tag k="amenity" v="pharmacy"/>
</node>
<node id="251774849" version="9" timestamp="2014-07-28T21:28:26Z" uid="92075" user="Art Penteur" changeset="24411346" lat="48.8468043" lon="2.3696423">
<tag k="phone" v="0143430996"/>
<tag k="dispensing" v="yes"/>
<tag k="name" v="Pharmacie de la Rapée"/>
<tag k="amenity" v="pharmacy"/>
<tag k="opening_hours" v="Mo-Fr 08:30-20:30; Sa 09:00-19:30"/>
</node>
<node id="263262912" version="3" timestamp="2014-07-28T21:37:24Z" uid="92075" user="Art Penteur" changeset="24411346" lat="48.8446917" lon="2.3101829">
<tag k="dispensing" v="yes"/>
<tag k="amenity" v="pharmacy"/>
</node>
....etc.
等
我尝试根据属性过滤记录,基本上我尝试检索没有属性的记录
<tag k="name" v="blahblahblah"/> field.
字段。
我一直在环顾四周,用传统的方法很容易做到,但是由于我在做任何与xml相关的事情方面的技能很差,我确实有几个问题:
<tag k="dispensing" v="yes"/>
那些没有
<tag></tag>
格式 <tag k="name">Pharmacie de la Rapée</tag>
Rapée药房
但以收到的格式,我看不到一条出路,如何得到我需要的孩子k=“name”
且没有子元素的
元素,可以使用like'//节点[not(tag/@k=“name”)]
例子:
$xml=saveXML($node);
}
输出:
CheckoutXPath
它将帮助您实现所需。您的xml非常容易误导。您所有的
节点都是自关闭相关的:谢谢您的帮助!您是否知道如何为每个具有k=“name”标记的元素获取v属性?基本上,如何访问$node element的确切标记k=“name”子元素我尝试过这样做,但是检索到的列表长度为0,这是不确定的,是否有我缺少的内容?做了几乎相同的事情。你知道我错过了什么吗?我还有一个问题。我试着独自一人去做,我到处找,但是,就我的一生而言,我找不到答案。假设我想同时获得每个节点的LAT和LON属性,这些节点有一个标记k=“name”子节点,但也有来自标记k=“name”的v值。既然没有getChild()函数或类似的东西,那怎么办呢?
$xml = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Osmosis SNAPSHOT-r26564" xapi:planetDate="2014-10-07T15:42:02Z" xmlns:xapi="http://jxapi.openstreetmap.org/">
<node id="251652819" version="6" timestamp="2013-10-19T14:03:10Z" uid="1198089" user="GeorgeKaplan" changeset="18434238" lat="48.8527413" lon="2.3333559">
<tag k="dispensing" v="yes"/>
<tag k="website" v="http://www.pharmacie-paris-citypharma.fr/"/>
<tag k="name" v="Pharmacie Citypharma"/>
<tag k="amenity" v="pharmacy"/>
</node>
<node id="251774849" version="9" timestamp="2014-07-28T21:28:26Z" uid="92075" user="Art Penteur" changeset="24411346" lat="48.8468043" lon="2.3696423">
<tag k="phone" v="0143430996"/>
<tag k="dispensing" v="yes"/>
<tag k="name" v="Pharmacie de la Rapée"/>
<tag k="amenity" v="pharmacy"/>
<tag k="opening_hours" v="Mo-Fr 08:30-20:30; Sa 09:00-19:30"/>
</node>
<node id="263262912" version="3" timestamp="2014-07-28T21:37:24Z" uid="92075" user="Art Penteur" changeset="24411346" lat="48.8446917" lon="2.3101829">
<tag k="dispensing" v="yes"/>
<tag k="amenity" v="pharmacy"/>
</node>
</osm>
XML;
$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//node[not(tag/@k="name")]');
foreach ($nodes as $node) {
echo $dom->saveXML($node);
}
<node id="263262912" version="3" timestamp="2014-07-28T21:37:24Z" uid="92075" user="Art Penteur" changeset="24411346" lat="48.8446917" lon="2.3101829">
<tag k="dispensing" v="yes"/>
<tag k="amenity" v="pharmacy"/>
</node>