读取 XML 个文件并将属性写入特定标签
Read XML file and write attributes into specific tags
我想存档以下内容。我有一个具有以下结构的 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>
所以我现在要做的是写入 <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"
之后写一些类似插入我的字符串的东西
类似于:
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
将其写入文件。
我想存档以下内容。我有一个具有以下结构的 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>
所以我现在要做的是写入 <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"
类似于:
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
将其写入文件。