faqts : Computers : Internet : Web : XML : XSL[T] (in IE 5.x)

+ Search
Add Entry AlertManage Folder Edit Entry Add page to http://del.icio.us/
Did You Find This Entry Useful?

Entry

XML: XSL: Tree:Create:Simple: How to create general tree in XML: 1 parent, 3 children? [table HTML]

Sep 7th, 2003 07:43
Knud van Eeden,


----------------------------------------------------------------------
--- Knud van Eeden --- 07 September 2003 - 03:57 pm ------------------

XML: XSL: Tree:Create:Simple: How to create general tree in XML: 1 
parent, 3 children? [table HTML / order 3]

Steps: Overview:

 1. -The general structure of the tree is:

       '/'
        |
        +-element1
        | |
        | +-------element11
        | |
        | +-------element12
        | |
        | +-------element13
        |
        +-element1
        | |
        | +-------element11
        | |
        | +-------element12
        | |
        | +-------element13
        |
        +-element1
        | |
        | +-------element11
        | |
        | +-------element12
        | |
        | +-------element13
        |
        +-element1
        | |
        | +-------element11
        | |
        | +-------element12
        | |
        | +-------element13
        |
        +-element1
        | |
        | +-------element11
        | |
        | +-------element12
        | |
        | +-------element13
        |
        ...
        |
        +-element1
          |
          +-------element11
          |
          +-------element12
          |
          +-------element13

 2. -Create an XML file:

      <?xml version="1.0" encoding="UTF-8"?>

      <!DOCTYPE MYBOOKS SYSTEM "array.dtd">

      <?xml-stylesheet type="text/xsl" href="array.xsl"?>

      <!-- library: (filenamemacro=array.xml)  -->

      <element1>

       <element11>

        <element111>
          information1
        </element111>

        <element112>
          information2
        </element112>

        <element113>
          information3
        </element113>

       </element11>

       <element11>

        <element111>
          information4
        </element111>

        <element112>
          information5
        </element112>

        <element113>
          information6
        </element113>

       </element11>

      </element1>

 3. -Create a DTD file:

      <!ELEMENT element1 (element11+)>

      <!ELEMENT element11 (element111,element112,element113)>

      <!ELEMENT element111 (#PCDATA)>

      <!ELEMENT element112 (#PCDATA)>

      <!ELEMENT element113 (#PCDATA)>

 4.1 -Create an XSL file: recursive solution using 'apply-templates'

      <?xml version="1.0"?>

      <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

       <!-- recursive solution: using 'apply-templates' -->

       <xsl:template match="/">
         <xsl:apply-templates/>
       </xsl:template>

       <xsl:template match="element1">
         <HTML>
          <HEAD>
           <TITLE>
             My elements
           </TITLE>
          </HEAD>
          <BODY>
           <BR/> Overview elements
            <xsl:apply-templates/>
          </BODY>
         </HTML>
       </xsl:template>

       <xsl:template match="element11">
         <BR/> element11 =
          <xsl:apply-templates/>
       </xsl:template>

       <xsl:template match="element111">
        <BR/> element111 =
         <xsl:value-of select="."/>
       </xsl:template>

       <xsl:template match="element112">
        <BR/> element112 =
         <xsl:value-of select="."/>
        </xsl:template>

       <xsl:template match="element113">
        <BR/> element113 =
         <xsl:value-of select="."/>
        </xsl:template>

      </xsl:stylesheet>

 4.1.1 -The HTML result shown in a browser is:

      Overview elements
      element11 =
      element111 = information1
      element112 = information2
      element113 = information3
      element11 =
      element111 = information4
      element112 = information5
      element113 = information6

 4.2 -Create an XSL file: iterative solution using 'for-each'

      <?xml version="1.0"?>

      <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

       <!-- iterative solution: using 'for-each' -->

       <xsl:template match="/">
         <xsl:apply-templates/>
       </xsl:template>

       <xsl:template match="element1">
         <HTML>
          <HEAD>
           <TITLE>
             My elements
           </TITLE>
          </HEAD>
          <BODY>

           <BR/> Overview elements

             <xsl:for-each select="element11">
              <BR/> element11 =

               <xsl:for-each match="element111">
                <BR/> element111 =
                 <xsl:value-of select="."/>
               </xsl:for-each>

               <xsl:for-each match="element112">
                <BR/> element112 =
                 <xsl:value-of select="."/>
               </xsl:for-each>

               <xsl:for-each match="element113">
                <BR/> element113 =
                 <xsl:value-of select="."/>
               </xsl:for-each>

             </xsl:for-each>

          </BODY>
         </HTML>

       </xsl:template>

      </xsl:stylesheet>

 4.2.1 -The HTML result shown in a browser is:

      Overview elements
      element11 =
      element111 = information1
      element111 = information2
      element111 = information3
      element112 = information1
      element112 = information2
      element112 = information3
      element113 = information1
      element113 = information2
      element113 = information3
      element11 =
      element111 = information4
      element111 = information5
      element111 = information6
      element112 = information4
      element112 = information5
      element112 = information6
      element113 = information4
      element113 = information5
      element113 = information6

---

Note: this iterative result, using the XSL is not what I expected,
      as it also shows information belonging to

       element111, element111, element113 respectively in
      the other elements.

      I should correct this later. Use e.g. for the moment the
      recursive XSL solution, as that one works correct.

---

Note: a table is a special case of a tree

as the table:

+-----+---------+---------+---------+
| row | column1 | column2 | column3 |
+-----+---------+---------+---------+
| row | column1 | column2 | column3 |
+-----+---------+---------+---------+
| row | column1 | column2 | column3 |
+-----+---------+---------+---------+
| row | column1 | column2 | column3 |
+-----+---------+---------+---------+
| row | column1 | column2 | column3 |
+-----+---------+---------+---------+

 is represented as a tree as:

       '/'
        |
        +-row
        | |
        | +-------column1
        | |
        | +-------column2
        | |
        | +-------column3
        |
        +-row
        | |
        | +-------column1
        | |
        | +-------column2
        | |
        | +-------column3
        |
        +-row
        | |
        | +-------column1
        | |
        | +-------column2
        | |
        | +-------column3
        |
        +-row
        | |
        | +-------column1
        | |
        | +-------column2
        | |
        | +-------column3
        |
        +-row
        | |
        | +-------column1
        | |
        | +-------column2
        | |
        | +-------column3
        |
        ...
        |
        +-row
          |
          +-------column1
          |
          +-------column2
          |
          +-------column3

---

Internet: see also:
http://www.faqts.com/knowledge_base/view.phtml/aid/24207/fid/671

-----------------------------------------------------------------------