XML Tutorial/XPath/following

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

following axis contains all nodes that come after the context node, but excludes all descendant nodes.

   <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> </table> </xsl:template> <xsl:template name="print"> <tr> <td> <xsl:value-of select="name()"/> <xsl:text> id = </xsl:text> <xsl:value-of select="./@id"/> </td> <td> <xsl:for-each select="following::*"> <xsl:if test="not(@id)"> <xsl:value-of select="name()"/> </xsl:if> <xsl:value-of select="./@id"/> <xsl:text/> </xsl:for-each> </td> </tr> </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?>
Axis: following
Element</th>
         <td>Node-set</th>
</table></source>


if test="not(descendant::*[name()=name(current())] | following::*[name()=name(current())])"

   <source lang="xml">

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

   <AAA>
     <BBB id="b1">
       <CCC name="q" size="12"/>
       <EEE id="e1">
         <SSS/>
       </EEE>
       <CCC weight="45"/>
       <CCC/>
     </BBB>
   </AAA>
   <AAA>
     <EEE id="e2"/>
     <CCC>
       <DDD/>
       <DDD/>
     </CCC>
   </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="/">
Axis: following
Element</th><td>Node-set</th>
<xsl:apply-templates select="//*"/>
   </xsl:template>
   <xsl:template match="*">
     <xsl:if test="not(descendant::*[name()=name(current())] | following::*[name()=name(current())])">
       <TR>
         <TD>
           <xsl:value-of select="name()"/>
         </TD>
         <TD>
           <xsl:apply-templates select="." mode="list"/>
         </TD>
       </TR>
     </xsl:if>
   </xsl:template>
   <xsl:template match="*" mode="list">
     <xsl:for-each select="//*[name()=name(current())]/*">
       <xsl:value-of select="name()"/>
     </xsl:for-each>
   </xsl:template>

</xsl:stylesheet> Output:

<?xml version="1.0" encoding="UTF-8"?>
dataAAAAAA
BBBCCCEEECCCCCC
SSS
AAABBBEEECCC
EEESSS
CCCDDDDDD
DDD
</source>