xslt - XSL apply-templates output issues -
given xml:
<?xml version="1.0" encoding="iso-8859-2" ?> <products> <p> <id> 50 </id> <name> murphy </name> <price> 33 </price> </p> <p> <id> 40 </id> <name> eddie </name> <price> 9999 </price> </p> <p> <id> 20 </id> <name> honey </name> <price> 9999 </price> </p> <p> <id> 30 </id> <name> koney </name> <price> 11 </price> </p> <p> <id> 10 </id> <name> margarethe </name> <price> 11 </price> </p> </products>
with xsl:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="p[id > 20]"> <idkp> <xsl:value-of select="id"/></idkp> <skitter><xsl:value-of select="name"/></skitter> </xsl:template> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>
having output:
<?xml version="1.0"?> <idkp>50</idkp><skitter>murphy</skitter> <idkp>40</idkp><skitter>eddie</skitter> 20 honey 9999 <idkp>30</idkp><skitter>koney</skitter> 10 margarethe 11
q : why there values of did not matched?
20, honey, 9999, ...
because of built-in template rules - when there no explicit templates match particular node, built-in rules used, element nodes means <xsl:apply-templates/>
, text nodes means <xsl:value-of select="."/>
. effect of these 2 rules in combination output text under elements not element tags themselves.
you add second do-nothing template
<xsl:template match="p" />
to ignore p
elements don't match condition. explicit template, do-nothing one, preferred on default built-in rule.
Comments
Post a Comment