4.1.4  Reguläre Ausdrücke

Manchmal reicht für das Durchsuchen des XML Baums XPATH nicht mehr aus und man will auf den Textknoten reguläre Ausdrücke aufrufen. Ich kenne drei XPATH Funktionen, in denen man XPATH angeben kann:
  • fn:matches(subject, pattern, flags)
  • fn:replace(subject, pattern, replacement, flags)
  • fn:tokenize(subject, pattern, flags)
Bei der Eingabe des regulären Ausdrucks muss man natürlich Zeichen, wie >,<,& maskieren, was den Ausdruck im Gegensatz zur herkömmlichen Nicht-XML Programmierung noch ein bisschen komplizierter macht.
Der Audruck, der bspw. auf alle XML Tags matched ist folgender: &lt;[^&gt;^!]+&gt; . Hier sind, die für XML reservierten, Zeichen bereits maskiert.

4.1.4.1  XSLT Analyze String

Es gibt aber auch ein eigenes XSLT Konstrukt, unabhängig von XPATH, um reguläre Ausdrücke anwenden zu können. Der Quelltext dazu sieht so aus:
<xsl:template match="text()[parent::xml-code]">
  <xsl:analyze-string select="." regex="&lt;[^&gt;^!]+&gt;">
    <xsl:matching-substring>
      <b><xsl:value-of select="."/></b>     
    </xsl:matching-substring>
    <xsl:non-matching-substring>
      <xsl:value-of select="."/>
    </xsl:non-matching-substring>
</xsl:template>
Hier wird jeder Textknoten eines Elements untersucht und falls ein XML-Tag enthalten ist, so wird dieses über die xsl:matching-substring Anweisung in ein <b> Tag gewrapped. Im nächsten Transformationsschritt wird dieses wiederum in Fettschrift dargestellt.
Das ist ein einfacher Syntax-Highlighter für XML Quelltexte. Auf diese Weise ist der Syntax-Highlighter für dieses PDF realisiert.
Hinweis
NOTIZ
Man kann auch die xsl:analyze-string Elemente in den xsl:matching-substring und xsl:non-matching-substring Elementen verschachteln, was natürlich noch wesentlich kompliziertere Problemstellungen erlaubt.
| | Rejected by , . | | Rejected by , . | | Rejected by , . | | Rejected by , .
Previous Page Next Page
Version: 93
Jan 25 2021