【发布时间】:2016-03-16 14:02:05
【问题描述】:
我有以下数据(XML/OSM 文件提取):
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Osmosis 0.44.1">
<node id="3569633" version="1" timestamp="2016-03-02T22:09:35Z">
<tag k="housenumber" v="8"/>
<tag k="street" v="Test Street"/>
</node>
<relation id="3571336" version="1" timestamp="2016-03-02T22:09:35Z">
<member type="way" ref="3571337" role="outer"/>
<tag k="type" v="boundary"/>
<tag k="admin_level" v="8"/>
<tag k="boundary" v="administrative"/>
</relation>
<way id="3536236" version="1" timestamp="2016-03-02T22:09:35Z">
<nd ref="3536237"/>
<nd ref="3536238"/>
<nd ref="3536239"/>
<nd ref="3536240"/>
<nd ref="3536241"/>
</way>
</osm>
我现在要做的是提取 id 号码,所以在这种情况下:
3569633
3571336
3536236
并将其保存为向量,以便我可以对其使用 max() 函数。
我对任何(“快速”)R 解决方案持开放态度。我尝试使用 xml 包但没有成功,因为我的 Xpath 知识太基础了。我也想过使用正则表达式,但在这里,我也想念这些知识。 当使用能够应用正则表达式的文本编辑器时,我得到了以下表达式:
id="(\d+)"
但这会标记所有:
id="3569633"
部分。如果我可以调整它以找到引号之间的值。我可以使用readLines() 函数,也许还可以使用grep()
任何帮助将不胜感激。
另外还可以提取ref="" 部分的数字,以便最终向量包含以下值:
3569633
3571336
3536236
3536237
3536238
3536239
3536240
3536241
【问题讨论】: