2015-09-01 68 views
0

我想归档以下内容。我有一个XML文件(具体一个OSM文件)结构如下:读取XML文件并将属性写入特定标签

<?xml version='1.0' encoding='UTF-8'?> 
<osm version="0.6" generator="osmconvert 0.8.2"> 
    <node id="-1" lat="47.4881774" lon="12.9061299"> 
     <tag k="NAMECAT" v="7355"/> 
     <tag k="gml_id" v="F8191__140687"/> 
     <tag k="FEAT_NAME" v="Das steinerne Meer"/> 
     <tag k="OBJECTID_1" v="140687"/> 
     <tag k="OBJECTID" v="1437"/> 
    </node> 
<way id="-1"> 
     <nd ref="-2"/> 
     <nd ref="-3"/> 
     <nd ref="-4"/> 
     <nd ref="-5"/> 
     <tag k="bla" v="1111"/> 
     <tag k="OBJECTID" v="12345"/> 
     <tag k="Short" v="old"/> 
     <tag k="gml_id" v="F5371__358"/> 
     <tag k="NAME" v="sdfsfd"/> 
     <tag k="street" v="Blablastreet 15"/> 
</way> 

etc. 
etc. 
</osm> 

所以我现在想要做的是写进<node><way>标签:

<node id="-1" lat="58.4881774" lon="67.9061299"> 

<way id="-1" version="1"> 

我想写两个字符串(timestamp="1970-01-01T00:00:01Z" version="1")这个标签(这大概是几百),这样的结果是这样的:

<node id="-1" lat="58.4881774" lon="67.9061299" changeset="1" timestamp="1970-01-01T00:00:01Z" version="1" > 

<way id="-1" version="1" changeset="1" timestamp="1970-01-01T00:00:01Z" version="1"> 

的位置并不重要,它只是重要的是,它是在<way...><node...>

当然之间所写的,我想救到底,并在变化将最好的情况放入同一个xml文件中。我已经尝试使用XML package存档类似的内容,但失败了。该readLines命令看起来前途无量,如果我云喜欢写东西后,每<way id"-1"<node id"-1"

回答

2

喜欢的东西插入我的字符串:

library(XML) 

doc <- xmlParse('<?xml version="1.0" encoding="UTF-8"?> 
<osm version="0.6" generator="osmconvert 0.8.2"> 
    <node id="-1" lat="47.4881774" lon="12.9061299"> 
     <tag k="NAMECAT" v="7355"/> 
     <tag k="gml_id" v="F8191__140687"/> 
     <tag k="FEAT_NAME" v="Das steinerne Meer"/> 
     <tag k="OBJECTID_1" v="140687"/> 
     <tag k="OBJECTID" v="1437"/> 
    </node> 
<way id="-1"> 
     <nd ref="-2"/> 
     <nd ref="-3"/> 
     <nd ref="-4"/> 
     <nd ref="-5"/> 
     <tag k="bla" v="1111"/> 
     <tag k="OBJECTID" v="12345"/> 
     <tag k="Short" v="old"/> 
     <tag k="gml_id" v="F5371__358"/> 
     <tag k="NAME" v="sdfsfd"/> 
     <tag k="street" v="Blablastreet 15"/> 
</way></osm>') 

invisible(xpathApply(doc, "//node", function(x) xmlAttrs(x) <- c(timestamp="1970-01-01T00:00:01Z", version="1"))) 
invisible(xpathApply(doc, "//way", function(x) xmlAttrs(x) <- c(timestamp="1970-01-01T00:00:01Z", version="1"))) 

cat(saveXML(doc)) 

这是从cat输出:

<?xml version="1.0" encoding="UTF-8"?> 
<osm version="0.6" generator="osmconvert 0.8.2"> 
    <node id="-1" lat="47.4881774" lon="12.9061299" timestamp="1970-01-01T00:00:01Z" version="1"> 
    <tag k="NAMECAT" v="7355"/> 
    <tag k="gml_id" v="F8191__140687"/> 
    <tag k="FEAT_NAME" v="Das steinerne Meer"/> 
    <tag k="OBJECTID_1" v="140687"/> 
    <tag k="OBJECTID" v="1437"/> 
    </node> 
    <way id="-1" timestamp="1970-01-01T00:00:01Z" version="1"> 
    <nd ref="-2"/> 
    <nd ref="-3"/> 
    <nd ref="-4"/> 
    <nd ref="-5"/> 
    <tag k="bla" v="1111"/> 
    <tag k="OBJECTID" v="12345"/> 
    <tag k="Short" v="old"/> 
    <tag k="gml_id" v="F5371__358"/> 
    <tag k="NAME" v="sdfsfd"/> 
    <tag k="street" v="Blablastreet 15"/> 
    </way> 
</osm> 

和你可以使用saveXML将其写入文件。

+0

完全是这样的。然后我的方式非常正确,但我可能不会想出如何写入XML文件。这个文档对'XML包'来说非常复杂。无论如何谢谢你!现在我必须获得该代码的逻辑。 – Deset

相关问题