Problem mit XSLT / SAXON
Raucherkrebs
- xsl
0 MudGuard0 Thomas J.S.
Hallo Forum,
ich versuche mich gerade an XSLT. Zur Konvertierung nach html benutze ich saxon.
Leider wird eine html Datei generiert die 0 Byte groß ist. Weiß nicht was ich falsch mache.
Liegt es am Befehl?
C:\saxon>saxon8.jar c:\xmltest\agb.xml c:\xmltest\agb.xsl >agb.html
Ich denke nicht. Weiß jemand Rat?
agb.xml
----------
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE agb SYSTEM "/dtd/agb.dtd">
<?xml-stylesheet type="text/css" href="styles.css"?>
<agb date="01.01.2002" updated="01.01.2005">
<section name="Allgemeines" number="1.0">
<p>blah blah</p>
</section>
</agb>
agb.dtd
--------------------
<!DOCTYPE [ agb
<!ELEMENT agb (topic)+>
<!ELEMENT section (subtopic | p)+>
<!ELEMENT p (#PCDATA)>
<!ATTLIST agb
date NMTOKEN #REQUIRED
updated NMTOKEN #REQUIRED
<!ATTLIST section
name CDATA #REQUIRED
number CDATA #REQUIRED
]]>
agb.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>
<head>
<title>Testconversion</title>
</head>
<body style="color: green;">
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="section">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="p">
<div style="border: 1px solid #000;"><xsl:value-of select="." /></div>
</xsl:template>
</xsl:stylesheet>
Hi,
<agb date="01.01.2002" updated="01.01.2005">
<section name="Allgemeines" number="1.0">
</section>
</agb>
<?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="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="section">
</xsl:template>
<xsl:template match="p">
</xsl:template>
Ich weiß nicht, was Saxon als Default-Template benutzt, sprich, welches Template er für das agb-Element anwendet, Du hast ja keins angegeben.
cu,
Andreas
Hallo,
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE agb SYSTEM "/dtd/agb.dtd">
<?xml-stylesheet type="text/css" href="styles.css"?><agb date="01.01.2002" updated="01.01.2005">
<section name="Allgemeines" number="1.0">
<p>blah blah</p>
</section>
</agb>agb.dtd
<!DOCTYPE [ agb
<!ELEMENT agb (topic)+>
<!ELEMENT section (subtopic | p)+>
<!ELEMENT p (#PCDATA)><!ATTLIST agb
date NMTOKEN #REQUIRED
updated NMTOKEN #REQUIRED<!ATTLIST section
name CDATA #REQUIRED
number CDATA #REQUIRED]]>
Etweder ist das eine exteren DTD dann hat ein "<!DOCTYPE [ agb" darin nichts zu suchen, oder ein interner Subset, dann gehört sie ins XML, aber dann so
<!DOCTYPE agb [
Dadurch ist es egal was du hast (exteren DTD oder interne Submenge), deine DTD ist ungültig. Saxon wird schon hier die Verarbeitung abbrechen.
Weiter muss laut deiner DTD ein <agb> eine oder mehrere <topic> enthalten, was dein XML nicht macht und somit wäre es auch dann ungültig, wenn deine DTD an sich korrekt wäre. Zweiter Abbruch.
Dann ist "subtopic " gar nicht in der DTD deklariert. Drietter Abbruchgrund.
Grüße
Thomas
So besser?
<!-- Externe DTD -->
<!ELEMENT agb (topic+)>
<!ELEMENT section (subtopic? | p+)>
<!ELEMENT subtopic (p+)>
<!ELEMENT p (#PCDATA)>
<!ATTLIST agb
date NMTOKEN #REQUIRED
updated NMTOKEN #REQUIRED
<!ATTLIST section
name CDATA #REQUIRED
number CDATA #REQUIRED
<!-- XSL Template -->
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Testconversion</title>
</head>
<body style="color: green;">
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="section">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="p">
<div style="border: 1px solid #000;"><xsl:value-of select="." /></div>
</xsl:template>
</xsl:stylesheet>
Hallo,
So besser?
Ist das eine a) Frage oder ein b) Vorwurf?
ad a) Nein, wenn du dein XML nicht entsprechend deiner DTD geändert hast (<agb> hat mindestens ein <topic> zu enthalten), denn in dem Fall validiert es noch immer nicht.
ab b) da sage ich nichts dazu.
Grüße
Thomas
Ist das eine a) Frage oder ein b) Vorwurf?
Fragen enden mit "?". ;)
ab b) da sage ich nichts dazu.
Würde nie jemand kritisieren der versucht anderen zu helfen. Ehrlich nicht. Habe die DTD korrigiert.
Hallo,
Ist das eine a) Frage oder ein b) Vorwurf?
Fragen enden mit "?". ;)
--- zitat ---
So besser?
------------- ;-)
Würde nie jemand kritisieren der versucht anderen zu helfen. Ehrlich nicht.
Schon ok.
Grüße
Thomas