This is a short and simple conversion :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match= "node()[not(self::root or ancestor-or-self::config or ancestor-or-self::row)]"> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>
when applied to the provided XML document:
<root> <postdate>2011-03-30</postdate> <location>84</location> <meal>07:36</meal> <config> <postdate>2011-03-30</postdate> <location>84</location> <meal>07:36</meal> <checknumber>91339082011-03-30T07:36:12</checknumber> </config> <items> <row> <descriptor>7297364</descriptor> <qty>1</qty> <price>33</price> <value>33</value> <recordtype>1</recordtype> <postdate>2011-03-30</postdate> <location>84</location> </row> <row> <descriptor>7794473</descriptor> <qty>1</qty> <price>60</price> <value>60</value> <recordtype>1</recordtype> <postdate>2011-03-30</postdate> <location>84</location> </row> </items> <tenders> <row> <id>13</id> <value>117.99</value> <recordtype>2</recordtype> <postdate>2011-03-30</postdate> <location>84</location> </row> </tenders> <taxes> <row> <id>2</id> <value>8.25</value> <recordtype>3</recordtype> <postdate>2011-03-30</postdate> <location>84</location> </row> </taxes> </root>
creates the desired, correct result:
<root> <config> <postdate>2011-03-30</postdate> <location>84</location> <meal>07:36</meal> <checknumber>91339082011-03-30T07:36:12</checknumber> </config> <row> <descriptor>7297364</descriptor> <qty>1</qty> <price>33</price> <value>33</value> <recordtype>1</recordtype> <postdate>2011-03-30</postdate> <location>84</location> </row> <row> <descriptor>7794473</descriptor> <qty>1</qty> <price>60</price> <value>60</value> <recordtype>1</recordtype> <postdate>2011-03-30</postdate> <location>84</location> </row> <row> <id>13</id> <value>117.99</value> <recordtype>2</recordtype> <postdate>2011-03-30</postdate> <location>84</location> </row> <row> <id>2</id> <value>8.25</value> <recordtype>3</recordtype> <postdate>2011-03-30</postdate> <location>84</location> </row> </root>
Explanation
source share