【发布时间】:2016-02-26 16:41:45
【问题描述】:
我有一个看起来像这样的 XML(OSM) 文件(小例子):
<way id="86015" version="1" timestamp="2016-02-26T15:01:32Z">
<nd ref="85642"/>
<nd ref="85641"/>
<nd ref="86016"/>
<nd ref="85642"/>
</way>
<relation id="1" version="1" timestamp="2016-02-26T15:01:32Z">
<member type="way" ref="2" role="outer"/>
<member type="way" ref="12" role="outer"/>
<member type="way" ref="17" role="outer"/>
<member type="way" ref="22" role="outer"/>
<member type="way" ref="27" role="outer"/>
<member type="way" ref="60" role="outer"/>
<member type="way" ref="65" role="outer"/>
<member type="way" ref="71" role="outer"/>
<member type="way" ref="75" role="outer"/>
<member type="way" ref="79" role="outer"/>
<member type="way" ref="84" role="outer"/>
<member type="way" ref="92" role="outer"/>
<member type="way" ref="108" role="outer"/>
<member type="way" ref="112" role="outer"/>
<member type="way" ref="132" role="outer"/>
<member type="way" ref="150" role="outer"/>
<member type="way" ref="166" role="outer"/>
<member type="way" ref="173" role="outer"/>
<member type="way" ref="178" role="outer"/>
<tag k="type" v="multipolygon"/>
<tag k="note" v="00000 ExampleCity"/>
<tag k="plz" v="00000"/>
</relation>
我想做的是使用 R 中的 XML package 对文件进行一些更改,尤其是 <relation> 部分。
1) 我想更改v= 属性
<tag k="type" v="multipolygon"/>
到
<tag k="type" v="boundary"/>
2) 我想在所有<relation> 父节点中添加一个新节点
<tag k='boundary' v='postal_code' />
3) 更改k= 属性部分:
<tag k="note" v="00000 ExampleCity"/>
到
<tag k="city" v="00000 ExampleCity"/>
我可以通过以下方式找到所有<relations>:
(doc是文件名)
getNodeSet(doc,"//relation")
或获取所有tags 中的所有<realtions>
但我不知道如何实际覆盖和添加我需要的部分。
【问题讨论】:
-
没错,错过了。现在更正了。谢谢
-
经典 XSLT 问题!不幸的是,迄今为止,R 还没有一个健壮、全面的 XSLT 库。但是,如果您有任何其他通用语言(Java、C#、Python、PHP、Perl,甚至 Excel VBA)、executable parsers(如 Saxon 和 Xalan),甚至是命令行 Bash 和 PowerShell,R 可以使用 @987654339 调用 XSLT 转换@。请告知您有什么可用的。
-
感谢您的回答。我对答案很灵活。我有 Python 和 Excel 可用。如果有很好的教程,我也愿意接受独立程序解决方案。这个问题很容易用文本编辑器完成,但我的文件“大”(1GB)确实会使所有非编程解决方案崩溃。
标签: xml r xml-parsing openstreetmap