XSLT Schleifen

saschakoeditz

Grünschnabel
Hallo,

ich habe folgende XML Datei...

HTML:
<datenuebermittlung.datenabgleich.quittung xmlns="http://www.xmeldit.de/xmeldit1.7" xmlns:xmeld="http://www.osci.de/xmeld131" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xmeldit.de/xmeldit1.7 http://www.xmeldit.de/xmeldit1.7/xmeldit-datenabgleich.xsd" version="1.7">
	<xmeld:nachrichtenkopf>
		<xmeld:ereignis>
			<xmeld:tabelle/>
			<xmeld:schluessel>datenuebermittlung.datenabgleich.quittung</xmeld:schluessel>
		</xmeld:ereignis>
		<xmeld:erstellungszeitpunkt>2007-12-10T14:03:56.802+01:00</xmeld:erstellungszeitpunkt>
		<xmeld:tagesvorgangszaehler>9</xmeld:tagesvorgangszaehler>
		<xmeld:absender>
			<xmeld:behoerdenkennung>Spiegelregister</xmeld:behoerdenkennung>
		</xmeld:absender>
		<xmeld:empfaenger>
			<xmeld:behoerdenkennung/>
			<xmeld:ANSCHRIFT>
				<xmeld:gemeindeschluessel>
					<xmeld:tabelle>36</xmeld:tabelle>
					<xmeld:schluessel/>
				</xmeld:gemeindeschluessel>
				<xmeld:hausnummer/>
				<xmeld:postleitzahl/>
				<xmeld:strasse/>
				<xmeld:wohnort/>
			</xmeld:ANSCHRIFT>
			<xmeld:GEMEINDE>
				<xmeld:amtlichergemeindename>Test</xmeld:amtlichergemeindename>
				<xmeld:amtlichergemeindeschluessel>
					<xmeld:tabelle>36</xmeld:tabelle>
					<xmeld:schluessel>16099999</xmeld:schluessel>
				</xmeld:amtlichergemeindeschluessel>
			</xmeld:GEMEINDE>
		</xmeld:empfaenger>
	</xmeld:nachrichtenkopf>
	<laufendenrderlieferung>12</laufendenrderlieferung>
	<antwortstatus>
		<xmeld:tabelle>6</xmeld:tabelle>
		<xmeld:schluessel>00</xmeld:schluessel>
	</antwortstatus>
	<saetze.gelesen>2059</saetze.gelesen>
	<saetze.erfolgreich>2059</saetze.erfolgreich>
	<saetze.fehlerhaft>0</saetze.fehlerhaft>
	<meldung>
		<satzid>4327</satzid>
		<fehlermeldung>(22) keine Staatsanghörigkeit angegeben</fehlermeldung>
		<betroffeneperson>
			<gemeindeschluessel>
				<xmeld:tabelle>36</xmeld:tabelle>
				<xmeld:schluessel>16099999</xmeld:schluessel>
			</gemeindeschluessel>
			<ordnungsmerkmal>4327</ordnungsmerkmal>
		</betroffeneperson>
	</meldung>
</datenuebermittlung.datenabgleich.quittung>

Ich möchte nun mit einer XSL Datei mir formatiert die "Meldung" ausgeben.
in folgenden Format:

Satzid: ...
Fehlermeldung: ...

Kann mir derzeit nich mal einen einzelnen Tag ausgeben lassen geschweige den 2 gezielte.

HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema " xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xmeld="http://www.osci.de/xmeld131" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xmeldit.de/xmeldit1.7 http://www.xmeldit.de/xmeldit1.7/xmeldit-datenabgleich.xsd">
	<xsl:output method="xhtml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:template match="/">
		<html>
			<head/>
			<body>
				<p>
					<xsl:for-each select="/meldung">
						test
					</xsl:for-each>					
				</p>
			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>

Ich dachte ja das mir jetzt mehrmals das Wort Test ausgegeben wird was aber nicht der fall ist.
Selbst die ausgabe der laufenden Nummer wäre schon ein erfolg für mich. "laufendenrderlieferung"

Wäre cool wenn mal jemand drüber schauen kann.
 
Hi.

Schau dir mal ein XPath Tuturial an, wie die Achsen und Elemente damit angesprochen werden.

In dem Fall, mach's z.B. mit
Code:
//meldung
Gruß
 
Hm...

das ist auf jeden Fall schon mal etwas mehr als ich hatte.
Keine Sorge die Tutorials schaue ich mir schon an und mit Google kann ich auch um gehen.

Was ich aus den Tutorials gelernt habe, versuche ich an meinen Beispiel halt umzusetzten.

Leider liefert mir das derzeit keine Ausgabe!

HTML:
<xsl:for-each select="//meldung">
       <xsl:value-of select="satzid" />
       test
</xsl:for-each>

Der value-of Tag sollte mir doch den Inhalt des Tags ausgeben oder bin ich schon wieder auf den Holzweg?
 
Hi.

Das Element befindet sich in einem Namespace, da muss man anders vorgehen. Um alle "meldung" Elemente unabhängig vom Namespace zu finden, versuch's mal so:
Code:
//*[name() = 'meldung']
Gruß
 
Hallo,

Danke erstmal für diesen hinweis.
Code:
//*[name() = 'meldung']
Wenn ich Elemente wie die Satzid die auch im Namespace stehen ausgeben will, muss ich dann genauso diese Schreibweise verwenden?

Und wie greife ich Jetzt auf die Element aus dem Nachrichtenkopf zu?
Wenn ich folgende XSL nutze
Code:
	<xsl:template match="/">
		<html>
			<head>
				<title>Ausgabe</title>
			</head>
			<body>
				<xsl:apply-templates/>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="/*[name() = 'nachrichtenkopf']">
		<div id="zeit">
			<p>
				<xsl:value-of select="./*[name() = 'erstellungszeitpunkt']" disable-output-escaping="no"/>
			</p>
		</div>
		<xsl:apply-templates/>
	</xsl:template>
	<xsl:template match="//*[name() = 'absender']"/>
	<xsl:template match="//*[name() = 'empfaenger']">
		<div id="empfänger">
			<xsl:value-of select="./*[name() = 'behoerdenkennung']" disable-output-escaping="no"/>
			<br/>
			<xsl:value-of select="./*[name() = 'strasse']" disable-output-escaping="no"/>
			<xsl:value-of select="./*[name() = 'hausnummer']" disable-output-escaping="no"/>
			<br/>
			<xsl:value-of select="./*[name() = 'postleitzahl']" disable-output-escaping="no"/>
			<xsl:value-of select="./*[name() = 'wohnort']" disable-output-escaping="no"/>
		</div>
	</xsl:template>
	<xsl:template match="//*[name() = 'saetze.gelesen']">
		<p>Anzahl der gelesenen Sätze</p>
		<xsl:value-of select="."/>
	</xsl:template>
	<xsl:template match="//*[name() = 'meldung']">
		<H3>
			<xsl:value-of select="./*[name() = 'satzid']"/>
		</H3>
		<br/>
	</xsl:template>

werden mir alle Daten aus dem Nachrichtenkopf direkt hintereinander ausgegeben.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück