Removing empty nodes from the RESULTING xslt transformation -


i have following requirement, need exclude <xlink:link> if it's href attribute-, , <loc> if it's value ends ".xml" | ".xslt" | ".properties". leaves me following. <div ...></div> there way remove these <div ...></div> in 1 go, or there need consecutive processing?

fragment of input:

<?xml version="1.0" encoding="utf-8" standalone="no"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml">     <url>         <loc id="843">en-us/system/xml/navigation.xml</loc>         <xhtml:link href="/fr-fr/system/xml/navigation.xml" hreflang="fr-fr" rel="alternate"/>         <xhtml:link href="/en-uk/system/xml/navigation.xml" hreflang="en-uk" rel="alternate"/>     </url>     <url>         <loc id="3159">/en-us/index.html</loc>         <xhtml:link href="/fr-lu/index.html" hreflang="fr-lu" rel="alternate"/>     </url> </urlset> 

my xslt:

<xsl:stylesheet version="2.0" xpath-default-namespace="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="video image xsl xhtml"> <xsl:output method="xhtml" indent="yes" omit-xml-declaration="yes"/> <xsl:strip-space elements="*"/>  <!-- identity transform --> <xsl:template match="@*|node()">     <xsl:copy copy-namespaces="no">         <xsl:apply-templates select="@*|node()" />     </xsl:copy> </xsl:template>  <!-- transform urlset --> <xsl:template match="urlset">     <div class="urlset"><xsl:apply-templates select="@*|node()" /></div> </xsl:template>  <!-- transform url --> <xsl:template match="url">     <div class="url"><xsl:apply-templates select="@*|node()" /></div> </xsl:template>    <!-- transform 'link' when valid --> <xsl:template match="xhtml:link">     <a><xsl:apply-templates select="@*|node()" /></a> </xsl:template>   <!-- transform 'loc' when valid --> <xsl:template match="loc">     <a>         <xsl:attribute name="href">             <xsl:value-of select="." />         </xsl:attribute>         <xsl:apply-templates select="@*" />     </a> </xsl:template>   <!-- transform 'link' when not valid --> <xsl:template match="xhtml:link[@href[ends-with(.,'.xml') or ends-with(.,'.xslt') or ends-with(.,'.properties')]]" />   <!-- transform 'loc' when not valid --> <xsl:template match="loc[ends-with(.,'.xml') or ends-with(.,'.xslt') or ends-with(.,'.properties')]" />  </xsl:stylesheet> 

result:

<div class="urlset">    <div class="url"></div>  <=== *** need rid of likes of ***    <div class="url">       <a href="/en-us/index.html" id="3159"></a>       <a href="/fr-lu/index.html" hreflang="fr-lu" rel="alternate"></a>    </div> 

i've done searching similar questions addressing removal of empty nodes original document, not resulting one.

any appreciated.

if add

<xsl:template match="url[every $node in (loc, xhtml:link/@href) satisfies (ends-with($node,'.xml') or ends-with($node,'.xslt') or ends-with($node,'.properties'))]"/> 

then url elements have loc , xhtml:link/@href endings want remove not transformed , not create output. approach can in 1 step, don't know whether there can other content foo elements present in url require element transformed, can write more complex conditions cover that.


Comments

Popular posts from this blog

searchKeyword not working in AngularJS filter -

sequelize.js - Sequelize: sort by enum cases -

user interface - how to replace an ongoing process of image capture from another process call over the same ImageLabel in python's GUI TKinter -