XML, XPath & XSLT

Jun.-Prof. Dr. Mark Hall

Wintersemester 2018/19

SGML

XML

Element

<element>
</element>
      
<element>
  Inhalt
</element>
      
<element>
</element>
<element>
</element>
      

Leere Elemente

<element/>
      

Verschachtelte Elemente

<parent>
  <child></child>
</parent>
      

XML DOM

<ancestor>
  <parent>
    <previous>
    </previous>
    <element>
      <child>
        <descendant>
        </descendant>
      </child>
    </element>
    <next>
    </next>
    <sibling>
    </sibling>
  </parent>
</ancestor>
      

Attribute

<element attribute-name="attribut-wert"/>
      
<element attribute-name1="attribut-wert1" attribute-name2="attribut-wert2"/>
      

Text

Dies ist ein <note>besonderer</note> Text
      
<element1></element1>
<element2></element2>
      

Wohlgeformtheit

<p>
  <span>Text</span>
</p>
      
<p>
  <span>Text</p>
</span>
      
<p>
  <span>Text
</p>
      

Validität

DTD - Document Type Definition

XML-Schema

XPath

/
      
/element
      
/element/child
      
//element-irgendwo-im-baum
      
/element@attribut
      
/element::text()
      
/element[@attribut=wert]
      
//element[1]
      

XSLT

XSLT

<xsl:template match="element">
  <text><xsl:value-of select="text()"/></text>
</xsl:template>
      
<element>Dies ist der Text</element>
      
<text>Dies ist der Text</text>
      

XSLT

<document>
  <element>Element 1</element>
  <element>Element 2</element>
</document>
      
<xsl:template match="element">
  <text><xsl:value-of select="text()"/></text>
</xsl:template>
      
<text>Element 1</text>
<text>Element 2</text>
      

XSLT

<geschichte>
  <titel>Eine kleine Geschichte</titel>
  <absatz>Dies ist der Anfang</absatz>
  <absatz stil="einruecken">Und so geht es weiter</absatz>
</geschichte>
      
<xsl:template match="/">
  <html>
    <body>
      <xsl:apply-templates></xsl:apply-templates>
    </body>
  </html>
</xsl:template>

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

<xsl:template match="absatz[@stil='einruecken']">
  <p class="indent"><xsl:apply-templates></xsl:apply-templates></p>
</xsl:template>
      
<html>
  <body>
    <p>Dies ist der Anfang</p>
    <p class="indent">Und so geht es weiter</p>
  </body>
</html>
      

XSLT

<hi rend="bold">Fett und <hi rend="italic">Fett-Kursiv</hi></hi>
      
<xsl:template match="//hi[@rend='bold']">
  <span class="bold"><xsl:value-of select="text()"/></span>
</xsl:template>

<xsl:template match="//hi[@rend='italic']">
  <span class="italic"><xsl:value-of select="text()"/></span>
</xsl:template>
      
<span class="bold">Fett und Fett-Kursiv</span>
      

XSLT

<hi rend="bold">Fett und <hi rend="italic">Fett-Kursiv</hi></hi>
      
<xsl:template match="hi[@rend='bold']">
  <span class="bold"><xsl:apply-templates></xsl:apply-templates></span>
</xsl:template>

<xsl:template match="hi[@rend='italic']">
  <span class="italic"><xsl:apply-templates></xsl:apply-templates></span>
</xsl:template>
      
<span class="bold">Fett und <span class="italic">Fett-Kursiv</span></span>
      

Literatur

  • Köhler, W., Wittenbrink, H., & Bormann, C. (2003). XML. Berlin TEIA-Lehrbuch-Verlag.
  • Kay, M. (2008). XSLT 2.0 and XPath 2.0: Programmer’s reference. Ind. Wiley.

Übungsaufgabe