• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

xml - valide aber mit Fehler

mr.jones

New member
Hi.
ich bastele gerade an einer xml Datei. bisher habe ich diese Auszeichnungssprache nicht so beachtet,will aber die Möglichkeiten mit simplexml (über php) nicht weiter außer Acht lassen.

Ich habe dazu also ein scheinbar kurzes xml Dokument geschrieben:

PHP:
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE News [
<!ELEMENT News (artikel,titel,id,content,date)>
<!ELEMENT artikel (#PCDATA)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT titel (#PCDATA)>
<!ELEMENT content (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT artikel (#PCDATA)>
]>

<News> 
  <artikel>
    <id>001</id>
    <titel>Einfuehrung in SimpleXML</titel>    
    <content>Hier wird eine kleine aber feine Einfuehrung in die Welt des Simple XML stehen.</content>
    <date>27.03.2008</date>
  </artikel>
</News>

Kurze xml Version als Muss angegeben, dazu noch eine interne DTD mit allen Elementen. Danach kommts in den validome (XML Validator - Powered by Validome) und der Validator stimmt meiner schreibweise auch zu, wohlgeformt und fehlerlos.
Nur wenn ich das dann in den Browser schiebe wird das nix. :-()

Fehler:

XML-Interpretation fehlgeschlagen: Syntaxfehler (Zeile: 1, Zeichen: 0)

Dokument als HTML neu analysieren.
Fehler:missing root element
Spezifikation:Extensible Markup Language (XML) 1.0 (Fourth Edition)


Mal aus dem Opera kopiert. "Missing Root Element" macht mich echt schwach. Denn ich habe mit "News" ja mein root element?!?

Wo hab ich den Fehler .. :(
 
du brauchst ein root-element :)

Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE News [
<!ELEMENT News (artikel,titel,id,content,date)>
<!ELEMENT artikel (#PCDATA)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT titel (#PCDATA)>
<!ELEMENT content (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT artikel (#PCDATA)>
]>

<newssammlung>
<News> 
  <artikel>
    <id>001</id>
    <titel>Einfuehrung in SimpleXML</titel>    
    <content>Hier wird eine kleine aber feine Einfuehrung in die Welt des Simple XML stehen.</content>
    <date>27.03.2008</date>
  </artikel>
</News>
</newssammlung>
 
@umwelt: Sein Root-Elementt heisst <News>, eine weitere Schicht drumherum wird sein Dokument nicht Valide machen.

Benutz mal den w3c-validator, der zeigt bei mir 6 Fehler an: The W3C Markup Validation Service

Deine DTD scheint nicht ganz dem zu entsprechen, was du danach definierst.
 
Mal aus dem Opera kopiert. "Missing Root Element" macht mich echt schwach. Denn ich habe mit "News" ja mein root element?!?

Wo hab ich den Fehler .. :(

Du hast News und artikel als Root-Element definiert, obwohl es nur eines geben darf, zusätzlich zweimal artikel aufgeführt und die Reihenfolge der Elemente id und title vertauscht.

So ist es valide:
PHP:
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE News [
<!ELEMENT News (artikel,id,titel,content,date)>
<!ELEMENT artikel (#PCDATA)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT titel (#PCDATA)>
<!ELEMENT content (#PCDATA)>
<!ELEMENT date (#PCDATA)>
]>

<News> 
  <artikel>Neuer Artikel</artikel>
    <id>001</id>
    <titel>Einfuehrung in SimpleXML</titel>    
    <content>Hier wird eine kleine aber feine Einfuehrung in die Welt des Simple XML stehen.</content>
    <date>27.03.2008</date> 
</News>

Lies mal hier einige Erklärungen dazu.
 
Auf diese Weise kann er nur noch einen Artikel definieren, ich glaube nicht dass das seinem Wunsch entspricht. Ich denke das war eher so gedacht:

Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE News [
<!ELEMENT News (artikel*)>
<!ELEMENT artikel (id,titel,content,date)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT titel (#PCDATA)>
<!ELEMENT content (#PCDATA)>
<!ELEMENT date (#PCDATA)>
]>

<News> 
  <artikel>
    <id>001</id>
    <titel>Einfuehrung in SimpleXML</titel>    
    <content>Hier wird eine kleine aber feine Einfuehrung in die Welt des Simple XML stehen.</content>
    <date>27.03.2008</date> 
  </artikel>
</News>

Ich würde übrigens alle Elemente im gleicheb Stil definieren. Also entweder immer alles kleingeschrieben oder immer den ersten Buchstaben gross.
 
Zurück
Oben