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

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -