Arithmetische XPath-Operatoren

(Auszug aus "Python & XML" von Christopher A. Jones & Fred L. Drake, Jr.)

Zusätzlich zur Auswahl von Elementen mit Lokalisierungspfaden bietet XPath auch Möglichkeiten zur Datenbearbeitung. Die numerischen Teile eines XML-Dokuments können addiert, dividiert, subtrahiert und multipliziert werden. Strings können auch auf Gleichheit untersucht werden.

XPath bietet arithmetische Operatoren zur Verwendung innerhalb von XPath-Ausdrücken. Diese Eigenschaft ist sehr praktisch bei XSL-Transformationen, die das Summieren einer Produktliste oder die Anwendung von Discounts auf Produktpreise zur Darstellung in HTML einschließen. Die in XPath verfügbaren Operatoren sind +, -, *, div und mod (jeweils für Addition, Subtraktion, Multiplikation, Division und Modulo). Es gibt auch Funktionen wie sum, mit denen Sie Zahlenmengen summieren und andere Aufgaben erledigen können. Wir behandeln Funktionen in Transformation von XML mit XSLT.

Stellen Sie sich vor, Sie haben eine XML-Datei mit einer Liste von Produkten und Sie möchten diese Produkte in einer anderen Anwendung anzeigen (z. B. Ihrer Website), müssen jedoch einen Nachlaß von 20% auf alle Verkaufspreise gewähren. Um dieses Problem zu lösen, können Sie die arithmetischen XPath-Operatoren anwenden. Betrachten wir das XML-Quelldokument, products.xml, im folgenden Beispiel.

Beispiel: products.xml

<?xml version="1.0" encoding="UTF-8"?>
<products>
  <item name="Schale" price="19.95"/>
  <item name="Spaten" price="4.95"/>
  <item name="Kraftmixer" price="149.95"/>
  <item name="Kochhut" price="39.95"/>
</products>

Um einen Blanko-Nachlaß von 20% auf alle Produkte zu geben, können Sie XPath in einem XSLT-Dokument benutzen. Das im nächsten Beispiel, products.xsl, gezeigte XSLT löst das Problem.

Beispiel: products.xsl

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="item">
    <p><b>Artikel:</b> <xsl:value-of select="@name"/>Originalpreis: <xsl:value-of select="@price"/>, Unser Preis: <xsl:value-of select="@price * 0.8"/></p>
  </xsl:template>
</xsl:stylesheet>

Die numerischen XPath-Ausdrücke befinden sich in den Elementen xsl:value-of. Der Nachlaß wird gewährt, indem der Wert des price-Attributs mit 0,8 multipliziert wird. Sie können die Transformation mit dem Werkzeug 4xslt ausführen (siehe XSLT-Prozessoren):

$ 4xslt.bat products.xml products.xsl
<html>
  <body>
    <p><b>Artikel:</b> Schale Originalpreis: 19.95, Unser Preis: 15.96</p>
    <p><b>Artikel:</b> Spaten Originalpreis: 4.95, Unser Preis: 3.96</p>
    <p><b>Artikel:</b> Kraftmixer Originalpreis: 149.95, Unser Preis: 119.96</p>
    <p><b>Artikel:</b> Kochhut Originalpreis: 39.95, Unser Preis: 31.96</p>
  </body>
</html>

Die Operatoren div und mod funktionieren wie die anderen Operatoren auch. So dividiert zum Beispiel @price div 2 alle ausgesuchten Preise durch 2.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Python & XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2002 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Python & XML" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de