读取XML文件并将属性写入特定标记

读取XML文件并将属性写入特定标记,xml,r,string,insert,Xml,R,String,Insert,我想归档以下内容。我有一个XML文件(具体来说是osm文件),其结构如下: <?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"/> <

我想归档以下内容。我有一个XML文件(具体来说是osm文件),其结构如下:

<?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>


位置并不重要,重要的是它写在
之间

当然,我最终还是希望将更改保存到同一个xml文件中。我已经尝试过使用
XML包
归档类似的内容,但失败了。如果我在每次
之后编写类似插入字符串之类的内容,则
readLines
命令看起来很有希望:

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))

您可以使用
saveXML
将其写入一个文件。

与此完全相同。然后我的方法非常正确,但我可能不知道如何写入XML文件。对于
XML包
,文档非常复杂。无论如何,谢谢你!现在我必须了解代码背后的逻辑。
<way id="-1" 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">
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))
<?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>