Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature currently requires accessing the site using the built-in Safari browser.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
xml,xsl: Verschachtelte Elemente - was mache ich falsch?
Diskutiere xml,xsl: Verschachtelte Elemente - was mache ich falsch? im Webentwicklung, Hosting & Programmierung Forum im Bereich Netzwerk & Internet; Ich möchte eine XML-Datei mittels XSLT ins Internet stellen. Innerhalb des Textes tauchen Namen auf, die in einer externen php-Datei gespeichert...
#1
D
DamonWilder
Mitglied
Themenersteller
Dabei seit
20.07.2005
Beiträge
10
Reaktionspunkte
0
Ich möchte eine XML-Datei mittels XSLT ins Internet stellen. Innerhalb des Textes tauchen Namen auf, die in einer externen php-Datei gespeichert werden. Die Namen in der XML-Datei sollen mit den Namen in der externen php-Datei verlinkt werden. In meiner XML-Datei sieht das folgendermaßen aus:
Code:
<p>
Die blendende Antithese des <name n =Simonides> griechischen Voltaire</name>,
daß die Mahlerey eine stumme Poesie, und die Poesie eine redende Mahlerey sey, stand wohl in keinem Lehrbuche. Es war ein Einfall, wie <name n = Simonides>Simonides</name> mehrere hatte; dessen wahrer Theil so einleuchtend ist, daß man das Unbestimmte und Falsche, welches er mit sich führet, übersehen zu müssen glaubet.</p>
Da der wirkliche Name nicht zwangsläufig mit dem Namen zwischen dem name-Tag identisch ist, habe ich mittels n-Attribut einen eindeutigen Identifier hinzugefügt.
Auf der html-Seite soll natürlich der Name zwischen dem name-Tag verlinkt sein. Meine entsprechende XSLT-Datei sieht in Auszügen so aus:
Code:
<!-- Vorlage für Element p -->
<xsl:template match=p>
<xsl:value-of select=./>
<xsl:apply-templates select=name/>
<br />
</xsl:template>
<!-- Vorlage für Element name und Weitergabe des Namen an eine php-Datei,
zur Weiterverarbeitung in einer Datenbank -->
<xsl:template match=name>
<i>
<a href=../php/personenregister.php?name={@n}>
<xsl:value-of select=./>
</a>
</i>
</xsl:template>
Der Text besteht aus mehreren <p>-Elementen hintereinander. Wenn ich die XML-Datei im Browser aufrufe, dann wird der Name innerhalb des Textes ganz normal (d.h. nicht kursiv und nicht verlinkt) dargestellt und am Ende des jeweiligen Absatzes (d.i. <p>) erscheint nun nochmals der Name mit Verlinkung.
Was mache ich falsch?
* Conny: Code-Tags eingefügt *
#2
G
Gandalf_the_Grey
Bekanntes Mitglied
Dabei seit
19.11.2003
Beiträge
2.768
Reaktionspunkte
0
Ort
Großraum Frankfurt/Main
Gib mal einen Link auf die Webseite und poste wenn möglich bitte mal den KOMPLETTEN Sourcecode. Ich verstehe momentan nämlich nur Bahnhof!
Leider funktioniert die Seite nur mit dem IE, den Quellcode der XML-Datei kann man sich dann ja anzeigen lassen.
Der vollständige Quellcode für die XSLT-Datei sieht momentan so aus:
Code:
<?xml version=1.0 encoding=ISO-8859-1?>
<xsl:stylesheet version=1.0 xmlns:xsl=[url]http://www.w3.org/1999/XSL/Transform>[/url]
<xsl:output method=html media-type=text/html indent=yes encoding=ISO-8859-1 omit-xml-declaration=yes doctype-public=-//W3C//DTD HTML 4.0 Transitional//EN />
<xsl:template match=/text>
<html>
<head>
<title>
<!-- Übergabe der Attributwerte der Elemente div1, div 2 und div3 in die Titelleiste des Browsers -->
<xsl:apply-templates select=div1/>
</title>
</head>
<body>
<table align = center width = 80% border = 0>
<tr>
<td>
<xsl:apply-templates select=div1/div2/div3/div4/>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
<!-- Vorlage für Element div1 -->
<xsl:template match=div1>
<xsl:value-of select=@n/>
<xsl:apply-templates select=div2/>
<xsl:apply-templates select=div2/div3/>
</xsl:template>
<!-- Vorlage für Element div2 -->
<xsl:template match=div2>
<xsl:value-of select=@n/>
</xsl:template>
<!-- Vorlage für Element div3 -->
<xsl:template match=div3>
<xsl:value-of select=@n/>
</xsl:template>
<!-- Vorlage für Element div4 -->
<xsl:template match=div4>
<xsl:apply-templates select=head/>
<xsl:apply-templates select=div5/>
<xsl:apply-templates select=p/>
</xsl:template>
<!-- Vorlage für Element head -->
<xsl:template match=head>
<h4 align = center>
<xsl:value-of select=./>
</h4>
</xsl:template>
<!-- Vorlage für Element div5 -->
<xsl:template match=div5>
<h5>
<xsl:value-of select=./>
</h5>
</xsl:template>
<!-- Vorlage für Element p -->
<xsl:template match=p>
<xsl:value-of select=./>
<xsl:apply-templates select=q/>
<xsl:apply-templates select=name/>
<xsl:apply-templates select=pb/>
<br />
</xsl:template>
<!-- Vorlage für Element q -->
<xsl:template match=q>
<i>
<xsl:value-of select=./>
</i>
<xsl:apply-templates select=name/>
<xsl:apply-templates select=pb/>
</xsl:template>
<!-- Vorlage für Element name und Weitergabe des Namen an eine php-Datei,
zur Weiterverarbeitung in einer Datenbank -->
<xsl:template match=name>
<i>
<a href=../php/personenregister.php?name={@n}>
<xsl:value-of select=./>
</a>
</i>
</xsl:template>
<!-- Vorlage für Element pb -->
<xsl:template match=pb>
<p style = text-align:right>
<xsl:text>[Seite </xsl:text>
<xsl:value-of select=@n/>
<xsl:text>]</xsl:text>
</p>
</xsl:template>
</xsl:stylesheet>
Danke im Voraus.
* Conny: Code-Tags eingefügt *
#4
C
connyas
Bekanntes Mitglied
Dabei seit
04.12.2004
Beiträge
5.463
Reaktionspunkte
0
Ort
Stuttgart
Sorry, ich kann da René nur zustimmen => Bahnhof
Auch wenn du nun einen Link zu der Seite hier gepostet hast, bitte wo/was ist eigentlich dein Problem ?? ??? ?? ;D
#5
D
DamonWilder
Mitglied
Themenersteller
Dabei seit
20.07.2005
Beiträge
10
Reaktionspunkte
0
Hmm, na dann versuche ich´s nochmal...
Auf der html-Seite sieht man mehrere Textabsätze, die zum Teil Namen enthalten. Diese Namen sollen verlinkt werden. Leider ist die Verlinkung aber nicht im Textblock, sondern am Ende jedes Absatzes. Deutlich sichtbar an den blauen Namen (der Link funtioniert noch nicht). Wenn Du jetzt in den Textabschnitt direkt über den jeweiligen Namen guckst, dann findest Du den Namen wieder. Hier sollte eigentlich der Link sein und nicht am Absatzende. Das ist mein Problem...
Ich glaub ich weiß auch wo das Problem liegt. Wenn ich Zuhause bin, kümmere ich mich drum und vieleicht kann ich dir heute Abend (wenn ich wieder DSL habe) schon hier eine Lösung posten.
P.S. Deine XML ist ja mal gar nicht Strukturiert. Mir scheint es als ob du versuchst XML und HTML zu verschachteln. Warum greifst du übrigens auf HTML Tags in der XML zurück? Es ist doch sinniger selbst Tags zu deffinieren. Das ist doch gerade die Stärke von XML!!!
#8
D
DamonWilder
Mitglied
Themenersteller
Dabei seit
20.07.2005
Beiträge
10
Reaktionspunkte
0
Hallo Gandalf,
doch, doch, meine XML-Tags sind schon selbstdefinierte XML-Befehle. Die sind komplett der sogenannten TEI (Text Encoding Initiative) entnommen, die Richtlinien erstellt hat, nach denen man Texte beschreiben kann. Eigentlich gehen meine Tags auf eine prose.dtd zurück, die momentan aber noch nicht verlinkt ist... (das funktioniert noch nicht, wie so vieles
#9
G
Gandalf_the_Grey
Bekanntes Mitglied
Dabei seit
19.11.2003
Beiträge
2.768
Reaktionspunkte
0
Ort
Großraum Frankfurt/Main
Sorry, aber die DTD will ich mal sehen. die sieht nicht valide aus. Aber lassen wir das. Ich melde mich sobald ich Zeit gehabt habe mal näher drüber zu schauen
das weglässt: <xsl:value-of select=./>
Dann sollten nur noch die Namen mit links drinstehen, allerdings fehlt halt der andere Text.
Ich hatte es damals aufgegeben HTML like XMLs mit XSLT in HTML darzustellen, weil man jeden Tag ein Template braucht.
Gruß, Michael
#11
D
DamonWilder
Mitglied
Themenersteller
Dabei seit
20.07.2005
Beiträge
10
Reaktionspunkte
0
Wie würdest Du denn die obige Seite programmieren? Vorausgesetzt, es handelt sich nicht um ein bisschen Text, sondern um mehrere tausend Seiten... Ich dachte, das wäre mit ausgelagerten Templates ganz gut gelöst?
, also offensichtlich eine Schleife eingebaut, was auch funktioniert. Jetzt werden die Namen innerhalb der Absätze korrekt verlinkt und nicht erst am Ende jedes Absatzes. Doch dummerweise wird jetzt meine <br/>-Anweisung ignoriert. Warum?
Thema:
xml,xsl: Verschachtelte Elemente - was mache ich falsch?