XML Tutorial/XPath/ancestor or self

Материал из Web эксперт
Версия от 11:26, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

ancestor-or-self axis includes all nodes in the ancestor axis plus the context node (which is in the self axis).

   <source lang="xml">

File: Data.xml <?xml version="1.0" encoding="utf-8"?>

   <AAA id="a1" pos="start">
     <BBB id="b1"/>
     <BBB id="b2"/>
   </AAA>
   <AAA id="a2">
     <BBB id="b3"/>
     <BBB id="b4"/>
     <CCC id="c1">
       <CCC id="c2"/>
     </CCC>
     <BBB id="b5">
       <CCC id="c3"/>
     </BBB>
   </AAA>

File: Transform.xslt <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet

     version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
<xsl:for-each select="/source//*"> <xsl:call-template name="print"/> </xsl:for-each>
   </xsl:template>
   <xsl:template name="print">
         <xsl:value-of select="name()"/>
         <xsl:text> id = </xsl:text>
         <xsl:value-of select="./@id"/>
         <xsl:for-each select="ancestor-or-self ::*">
           <xsl:if test="not(@id)">
             <xsl:value-of select="name()"/>
           </xsl:if>
           <xsl:value-of select="./@id"/>
           <xsl:text/>
         </xsl:for-each>
   </xsl:template>

</xsl:stylesheet></source>