PDA

Volledige versie bekijken : [xml]XML Parsing Error: undefined entity


jambek2003
%Europe/Berlin %874 %2006, 20:59
Ik ben bezig met een basiscursus xml. Nu werken de oefeningen maar half. Met mijn kennis van xml biedt w3c niet echt veel uitkomst, ik snap er geen snars van.

Het gaat om het volgende ik heb een dtd gemaakt en dmv. xsl wil ik een xml bestand opmaken. Er bestaat externe entiteiten in het xml-bestand. IE6 geeft entiteiten niet weer, Firefox loopt te melken over undefined entity en Opera loopt over xslt te melken. Ik zie geen verschil met het boek heb eea. al geprobeerd ik heb volgens mij entitiet goed gedeclareerd in dtd.

Volgende code;

xml


<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="./adressen2.xsl"?>
<!DOCTYPE klanten SYSTEM "./klanten.dtd">
<klanten>
<bedrijf class="geenkleur">
<nummer>14112</nummer>
<naam>Daring</naam>
<adres>Kerkplein 8</adres>
<pc>3741 KP</pc>
<plaats>Baarn</plaats>
<tel>0355 121212</tel>
<fax>0355 212121</fax>
<email>info@daring.nl</email>
<web>www.daring.nl</web>
<contact>
<vnaam>Magda</vnaam>
<anaam> de Boer</anaam>
<tel>0355 121234</tel>
<email>mdeboer@daring.nl</email>
&brief1;
&brief2;
</contact>
</bedrijf>
</klanten>
[/xml]


DTD


<!ELEMENT klanten (bedrijf+)>
<!ELEMENT bedrijf (nummer, naam ,adres, pc, plaats, tel?, fax?, email, web?, contact*)>
<!ELEMENT nummer (#PCDATA)>
<!ELEMENT naam (#PCDATA)>
<!ELEMENT adres (#PCDATA)>
<!ELEMENT pc (#PCDATA)>
<!ELEMENT plaats (#PCDATA)>
<!ELEMENT tel (#PCDATA)> <!-- tevens declaratie voor nested element in contact -->
<!ELEMENT fax (#PCDATA)>
<!ELEMENT email (#PCDATA)> <!-- tevens declaratie voor nested element in contact -->
<!ELEMENT web (#PCDATA)>
<!ELEMENT contact (vnaam, anaam, tel, email, brief?)>
<!ELEMENT vnaam (#PCDATA)>
<!ELEMENT anaam (#PCDATA)>
<!ELEMENT brief (aan, betreft, inhoud)> <!-- eniteit "briefX.xml"-->
<!ELEMENT aan (#PCDATA)>
<!ELEMENT betreft (#PCDATA)>
<!ELEMENT inhoud (#PCDATA)>

<!-- atributen -->

<!ATTLIST bedrijf class (kleur|geenkleur) "geenkleur">

<!-- entiteiten -->

<!ENTITY brief1 SYSTEM "./brief1.xml">
<!ENTITY brief2 SYSTEM "./brief2.xml">


entiteit


<?xml version="1.0" encoding="UTF-8"?>
<brief>
<aan>Daring</aan>
<betreft>Boek XML</betreft>
<inhoud>dit is de tekst van de brief</inhoud>
</brief>


Misschien begrijp ik ihet niet, of het boek is fout (zal niet de eerste keer zijn).

jambek2003
%Europe/Berlin %875 %2006, 21:00
Goh.... Niet allemaal tegelijk! Trouwens ik ben het nu met XMLspy aan het controleren en er wordt nog steeds geen entiteiten een XMLspy's browser getoond. De entiteiten, die ik in DTD heb gedeclareerd, blijven als entiteit in browser -> &brief;

Met mijn beperkte kennis van xml kan ik het zelf niet oplossen. Ik heb al 5 keer gecontroleerd of ik alles goed heb ingetokkeld! Het $%$^^# boek 'Basiscursus XML' legt niets over parsers uit. Volgens dat boek kan je de xml-bestanden met IE6 openen.

josko
%Europe/Berlin %941 %2006, 22:35
Geef zoiezo al de complete foutmeldingen :)

jambek2003
%Europe/Berlin %646 %2006, 15:31
IE6 geeft geen Entiteiten weer in een via XSL opgemaakt pagina. Firefox loopt te neuselen over undeclared entity. Dat schijnt echter een bug in Firefox te zijn. en opera heeft XSLT processing failed. Ik gebruik dus geen externe parser ofzo.

Ik ben er door te klooien achter dat externe entiteiten en DTD wel worden geparsed, maar dat externe entiteiten niet met XSL worden opgemaakt. Ik doe dit allemaal in IE6 omdat deze browser het nog het meest fatsoenlijk doet. Ik heb ook XMLspy 2007 gedownload, maar daar snap ik geen snars van. Ik ben nu dus weer lekker met XML marker bezig.

Geef ff het relevante stuk van XSL hieronder;

</tr>
<xsl:apply-templates select="klanten/bedrijf"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="klanten/bedrijf">
<tr>
<td>
<xsl:value-of select="naam"/>
</td>
<td>
<xsl:value-of select="plaats"/>
</td>
<td>
<xsl:value-of select="email"/>
</td>
<!--<td>
<xsl:value-of select="contact/brief/betreft"/>
//alleen op deze manier gaat het goed als ook de 2de template is ge'outcomment.
</td> -->
<td>
<xsl:apply-templates match="contact/brief"/> <!-- hier gaat het om. brief is een externe entity-->
</td>
</tr>
</xsl:template>
<xsl:template match="contact/brief"> <!-- hier gaat het om -->
<xsl:value-of select="betreft"/>
<br/>
</xsl:template>
</xsl:stylesheet>


Hoe kan ik trouwens ervoor zorgen dat ik server-sided XMl parsed? Is er zoiets als een XML parser die gebruik van apache kan maken. Ik heb namelijk al WAMP op mijn pc geinstaleerd.

mech7
%Europe/Berlin %655 %2006, 15:43
Al heb je wamp kan je xlst extensie gebruiken..

http://nl3.php.net/xslt

ik betwijfel of dat opera en ff een bug inzit.. lijkt mij eerder sloppy rendering van IE waarom het daar wel werkt :)

Probeer het overigens eerst zonder DTD.. dat haalt dan al een hoop complexiteit weg :)

jambek2003
%Europe/Berlin %658 %2006, 15:47
https://bugzilla.mozilla.org/show_bug.cgi?id=204102