i have large number of html files following:
<html> <body> <div class="a">aaa <div class="a1">a1a1a1</div> <div class="a2">a2a2a2</div> <div class="a2">a3a3a3</div> </div> <div class="v u">bbb <div class="x">xxx</div> <div class="y">yyy</div> <div class="z">z1z1z1 <div class="w">www1</div> <div class="w">www2</div> <div class="w">www3</div> </div> <div class="z">z2z2z2 <div class="w">www4</div> <div class="w">www5</div> <div class="w">www6</div> </div> </div> <div class="i"> <div class="j">jjj</div> <div class="x"> <div class="k"> <div class="w">www7</div> <div class="w">www8</div> </div> </div> </div> </body> </html>
the classes x, y, z, , w can occur number of times , div throughout html.
there 1 , 1 div class="v u"
i to:
- rename classes x, y, z, , w b1, b2, b3, , b4 respectively if , if ancestor of node div class="v u"
- rename div class="v u" div class="b"
the result be:
<html> <body> <div class="a">aaa <div class="a1">a1a1a1</div> <div class="a2">a2a2a2</div> <div class="a2">a3a3a3</div> </div> <div class="b">bbb <div class="b1">xxx</div> <div class="b2">yyy</div> <div class="b3">z1z1z1 <div class="b4">www1</div> <div class="b4">www2</div> <div class="b4">www3</div> </div> <div class="b3">z2z2z2 <div class="b4">www4</div> <div class="b4">www5</div> <div class="b4">www6</div> </div> </div> <div class="i"> <div class="j">jjj</div> <div class="x"> <div class="k"> <div class="w">www7</div> <div class="w">www8</div> </div> </div> </div> </body> </html>
i have tried following xslt, doesn't give me expected result:
<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="div[@class='v u']"> <div class="b"> <xsl:copy-of select="node()" /> </div> </xsl:template> <xsl:template match="div[@class='v u']/div[@class='x']"> <div class="b1"> <xsl:copy-of select="node()" /> </div> </xsl:template> <xsl:template match="div[@class='v u']/div[@class='y']"> <div class="b2"> <xsl:copy-of select="node()" /> </div> </xsl:template> <xsl:template match="div[@class='v u']/div[@class='z']"> <div class="b3"> <xsl:copy-of select="node()" /> </div> </xsl:template> <xsl:template match="div[@class='v u']/div[@class='z']/div[@class='w']"> <div class="b4"> <xsl:copy-of select="node()" /> </div> </xsl:template> </xsl:stylesheet>
i think understand why not giving me correct result, not seem find correct solution.
instead of <xsl:copy-of select="node()" />
need use <xsl:apply-templates/>
or <xsl:apply-templates select="node()"/>
keep template based processing alive.
Comments
Post a Comment