xml - How to remove and add select elements via XSLT? -
i have following xml document (just excerpt):
<osm> <node id="1" version="1" timestamp="2016-02-29t01:33:20z" lat="0.0" lon="0.657002"> <tag k="stat_nr" v="40045"/> <tag k="ortsgr_kl" v="0"/> <tag k="town_id" v="0000"/> <tag k="name2" v="city2"/> <tag k="name1" v="city1"/> <tag k="id" v="8942835"/> </node> <node id="2" version="1" timestamp="2016-02-29t01:33:20z" lat="0.93198" lon="0.000"> <tag k="land" v="d"/> <tag k="id_ref" v=""/> <tag k="stat_nr" v="40045"/> <tag k="name1" v="examplecity"/> <tag k="id" v="0000"/> </node> </osm>
what following result:
<osm> <node id="1" version="1" timestamp="2016-02-29t01:33:20z" lat="0.0" lon="0.657002"> <tag k="stat_nr" v="40045"/> <tag k="name1" v="city1"/> <tag k="id" v="8942835"/> <tag k="test" v="8942835"/> </node> <node id="2" version="1" timestamp="2016-02-29t01:33:20z" lat="0.93198" lon="0.000"> <tag k="stat_nr" v="40045"/> <tag k="name1" v="examplecity"/> <tag k="id" v="0000"/> <tag k="test" v="0000"/> </node> </osm>
delete except each of following tags:
<tag k="stat_nr"> <tag k="name1" > <tag k="id" >
but add new tag copying values k="id" v=
:
<tag k="test" v="8942835"/> <tag k="test" v="0000"/>
given xml, repaired well-formed using same case on closing osm
tag opening osm
tag,
<osm> <node id="1" version="1" timestamp="2016-02-29t01:33:20z" lat="0.0" lon="0.657002"> <tag k="stat_nr" v="40045"/> <tag k="ortsgr_kl" v="0"/> <tag k="town_id" v="0000"/> <tag k="name2" v="city2"/> <tag k="name1" v="city1"/> <tag k="id" v="8942835"/> </node> <node id="2" version="1" timestamp="2016-02-29t01:33:20z" lat="0.93198" lon="0.000"> <tag k="land" v="d"/> <tag k="id_ref" v=""/> <tag k="stat_nr" v="40045"/> <tag k="name1" v="examplecity"/> <tag k="id" v="0000"/> </node> </osm>
this xslt, based on identity transformation 1 template added squelch requested tag
elements , 1 template added append requested tag
elements,
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="xml" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="tag[@k!='stat_nr' , @k!='name1' , @k!='id']"/> <xsl:template match="tag[@k='id']"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> <tag k="test" value="{@v}"/> </xsl:template> </xsl:stylesheet>
will produce xml,
<?xml version="1.0" encoding="utf-8"?> <osm> <node id="1" version="1" timestamp="2016-02-29t01:33:20z" lat="0.0" lon="0.657002"> <tag k="stat_nr" v="40045"/> <tag k="name1" v="city1"/> <tag k="id" v="8942835"/> <tag k="test" value="8942835"/> </node> <node id="2" version="1" timestamp="2016-02-29t01:33:20z" lat="0.93198" lon="0.000"> <tag k="stat_nr" v="40045"/> <tag k="name1" v="examplecity"/> <tag k="id" v="0000"/> <tag k="test" value="0000"/> </node> </osm>
as requested.
Comments
Post a Comment