Vorgehensweise bei XML-Fehlern

Nutzbar ab: Version

Bei Fehlern in der XML-Struktur erleichert Ihnen Weblication® den Weg zur Problemlösung mit gezielten Hinweisen.

Weblication® verwendet das XML-Format, um Inhalte und Konfigurationsdaten zu speichern. Bei der Verwendung von XML gelten verbindliche Regeln, welche die Notation und das Format der XML-Dateien definieren. XML-Dateien müssen "valide und wohlgeformt" sein (siehe auch Artikel "Grundlagen von XML").

Sind in der XML-Struktur nicht XML-konforme Angaben gesetzt, erzeugt dies in den meisten Fällen einen XML-Fehler. Ein Fehler kann sich bereits während der XSL-Transformation auswirken oder erst nach der Transformation einen XML-Fehler in der erzeugten Seite generieren. Diese beiden Fälle zeigen wir Ihnen nachfolgend auf Grundlage der BASE Projektbasis. Beachten Sie auch die Hinweise ganz unten!

1) XML-Fehler während der XSLT-Transformation der Seite

Load XML Error bei der XSL-Transformation
Load XML Error bei der XSL-Transformation

Ein Fehler in der XML-Struktur der zu transformierenden Datei führt bei Aufruf der Seite zu einem Seitenabbruch. Dem Seitenbesucher wird in den meisten Fällen nur eine leere / weiße Seite angezeigt. Einem eingeloggten Weblication® CMS Administrator wird zum Seitenabbruch eine Hinweismeldung (Load XML ERROR, siehe Screen) angezeigt.
Die Hinweis-Box liefert zum einen die genaue Angabe, an welcher Stelle der Fehler zu suchen ist. Zum anderen enthält diese einen Open XML Link, über welchen Sie detailliertere Angaben zum Fehler in der zu transformierenden Seiten finden. Der Info-Link führt Sie per Klick direkt auf diesen Artikel und über "Backend öffnen" gelangen Sie direkt in das Weblication® CMS Backend und können über die Verzeichnisstruktur die zuletzt geänderte Datei für eine Fehlerbehebung erreichen.

Firefox: Fehlerhinweise nach Klick auf "Open XML"
Firefox: Fehlerhinweise nach Klick auf "Open XML"
Chrome: Fehlerhinweise nach Klick auf "Open XML"
Chrome: Fehlerhinweise nach Klick auf "Open XML"

Die XML-Fehlerinformationen enthalten die genaue Angabe, in welcher Zeile und Spalte der zu transformierenden Datei der Fehler zu suchen ist. Der in diesem Beispiel angeführte Fehler wurde durch ein doppeltes lang-Attribut im html-Tag der standard.wDocument.php provoziert. Die Fehlermeldung weist darauf hin:

    error on line 29 at column 87: Attribute lang redefined

Sie müssen lediglich die im tmpHTTP-Verzeichnis temporär abgelegte Seite im Quelltext aufrufen (z.B. bei Chrome oder Firefox über Tastenkombination STRG+U). Gehen Sie dann zur genannten Zeile (line) und Spalte (column), um die Stelle genauer zu analysieren. Ggf. kann zumindest die Spaltennummer nicht ganz genau passen, weshalb eine Fehlersuche im Umkreis der genannten Stelle erforderlich sein kann.

Tipp

Mozilla Firefox zeigt XML-Fehler oft detaillierter an als Chrome, weil die beiden Browser unterschiedliche Strategien beim Umgang mit nicht wohlgeformtem XML verfolgen – insbesondere im Kontext von XSLT, XML-Imports oder XML-basierten Templates, wie sie z. B. im Weblication CMS genutzt werden.
Firefox nutzt einen strengen XML-Parser (basierend auf Expat/libxml2) und protokolliert Debug-Informationen im Browser in der Regel detaillierter an wie es bei Chrome der Fall ist.

2) XML-Fehler innerhalb der generierten Seite

XML-Fehler Hinweis in SiteInfo Panel
XML-Fehler Hinweis in SiteInfo Panel

Ein Fehler in der XML-Struktur der schon generierten Seite wird Ihnen - als Administrator eingeloggt - über einen roten Balken zum Siteinfo-Symbel im Weblication® Panel signalisiert. Durch Klick auf das Siteinfo-Symbol wird innerhalb der Box mit den Seiteninformationen (siteinfo) oben ein Link angezeigt. Durch Klick auf den Link "Diese Seite enthält einen XML-Fehler" erhalten Sie detailliertere Angaben zum Fehler in der generierten Seite.

Fehlerhinweise nach Klick auf XML-Fehler Link
Fehlerhinweise nach Klick auf XML-Fehler Link

Die XML-Fehlerinformationen enthalten die genaue Angabe, in welcher Zeile und Spalte der generieren Seite der Fehler zu suchen ist. Der in diesem Beispiel angeführte Fehler wurde durch eine Javascript-Definition verursacht, die ein kaufmännisches UND (&) enthält. Die Fehlermeldung weist darauf hin:

    error on line 44 at column 59: xmlParseEntityRef: no name

Sie müssen lediglich die im tmpHTTP-Verzeichnis temporär abgelegte Seite im Quelltext aufrufen (z.B. bei Chrome oder Firefox über Tastenkombination STRG+U). Gehen Sie dann zur genannten Zeile (line) und Spalte (column), um die Stelle genauer zu analysieren. Ggf. kann zumindest die Spaltennummer nicht ganz genau passen, weshalb eine Fehlersuche im Umkreis der genannten Stelle erforderlich sein kann.

Nachfolgend ein Javascript Beispiel-Code zu diesem Fall, welches einen XML-Fehler in der bereits transformierten Seite wirft. Das Beispiel setzt innerhalb der standard.wDocument.php ein Javascript ein, das einmal mit cdata-section im script-Tag gesetzt ist und einmal ohne.

KORREKT

JS in der standard.wDocument.php gesetzt:

Beispiel 1: Javascript-Tag mit cdata-section und CDATA-Tags
Beispiel 1: Javascript-Tag mit cdata-section und CDATA-Tags

Beispiel 2: JS in standard.wDocument.php

<script>
  /*<![CDATA[*/
  console.log('1&2');
  /*]]>*/
</script>

FALSCH

<!-- JS in der standard.wDocument.php gesetzt -->
<script>/*<![CDATA[*/
  var locationHrefNew = location.href.replace(/#.*/, '');
  
  locationHrefNew = locationHrefNew.replace(/[\?\&]$/g, '');
/*]]>*/</script>

Tipp

Durch Kopieren der wichtigen Teile solch einer Fehlermeldung und einfügen in das Suchen & Ersetzen Werkzeug (siehe weiterführende Links unten) können Sie durch "Nur Suchen" meist recht schnell die verursachende Datei lokalisieren.

Ab CMS-Version 021.002.024.000 kann die Anzeige von XML-Fehlern im Panel auch deaktiviert werden.

<variable description="Anzeige von XML-Fehlern im Panel unterdrücken" key="hide_xml_errors_panel" type="char.select" values="|1" texts="Nein|Ja"/>

3) XML-Fehler Anzeige im Editor

Verfügbar ab den Beta-Versionen nach CMS-Version 019.002.000.000

Bei aktivierter Conf-Einstellung ( /wConf/editor/debug/@showXmlErrors = "1" ) weist die Software im Editor in der oberen Leiste mit einem roten Balken auf XML-Fehler hin. Die Funktion soll helfen, auch XML-Fehler korrigieren zu können, welche nicht direkt ersichtlich sind. Ist die Conf-Einstellung deaktiviert, erfolgt der Hinweis unscheinbar im rechten oberen Eck.
Fehler im XML können durch Skripte/Templates in der Software bedingt sein oder Ihre Ursache im Projekt haben. 

Software bedingte Fehler werden behoben, sobald diese bekannt werden. Ebenso XML-Fehler, welche im Standard mit dem BASE-Projekt und dessen Skripten/Templates ausgeliefert werden.

Ein Klick auf den roten Balken zeigt bei Aufruf im Firefox die konkrete Stelle im Quelltext an. Die Vorgehensweise ist wie bereits weiter oben beschrieben.

4) Weitere Beispiele:

Facebook Connet (Widget) über HTML-Quelltext Element eingebunden

Korrekt:

<div id="fb-root"></div>
<script>
/*<![CDATA[*/(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/de_DE/sdk.js#xfbml=1&version=v2.3";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
/*]]>*/</script>
<div class="fb-page" data-href="https://www.facebook.com/tagesschau" data-width="220" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true" data-show-posts="true"><div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/tagesschau"><a href="https://www.facebook.com/tagesschau">Tagesschau</a></blockquote></div></div> 

Korrekt:

<div id="fb-root"></div>
<script>
/*<![CDATA[*/(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/de_DE/sdk.js#xfbml=1&version=v2.3";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
/*]]>*/</script>
<div class="fb-page" data-href="https://www.facebook.com/tagesschau" data-width="220" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true" data-show-posts="true"><div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/tagesschau"><a href="https://www.facebook.com/tagesschau">Tagesschau</a></blockquote></div></div> 

Falsch:

<div id="fb-root"></div>
<script>
(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/de_DE/sdk.js#xfbml=1&version=v2.3";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<div class="fb-page" data-href="https://www.facebook.com/tagesschau" data-width="220" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true" data-show-posts="true"><div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/tagesschau"><a href="https://www.facebook.com/tagesschau">Tagesschau</a></blockquote></div></div> 

Wichtige Hinweise

  • Beim Einsatz von Javascripts in den Seiten müssen Sie darauf achten, daß bei Verwendung von z.B. kaufmännischem UND (&) oder HTML-Code innerhalb des JS-Code das einleitende script-Tag mit dem Attribut cdata-section="yes" versehen ist, damit dieser Bereich in einem CDATA-Bereich ausgegeben wird.
  • Sofern Sie das Weblication® Backend direkt aufrufen müssen, können Sie dies wie folgt vornehmen:
    http://Ihre-Lizenzierte-Domain/weblication/grid5/scripts/wSystem.php
    (ersetzen Sie "Ihre-Lizenzierte-Domain" durch die entsprechende Lizenzdomain)
FAQs
Was bedeutet „valide und wohlgeformt“ bei XML in Weblication®?
Weblication® verwendet XML zum Speichern von Inhalten und Konfigurationsdaten. Damit die Verarbeitung korrekt läuft, müssen XML-Dateien verbindliche Regeln einhalten und sowohl „valide“ als auch „wohlgeformt“ sein. Bei Verstößen gegen die XML-Konventionen entstehen typischerweise XML-Fehler.
Welche Folgen hat ein XML-Fehler während der XSLT-Transformation?
Wenn in der zu transformierenden XML-Struktur ein XML-Fehler vorliegt, bricht die Seite beim Aufruf in den meisten Fällen ab. Besucher sehen häufig eine leere/weiße Seite. Ein eingeloggter Weblication® CMS Administrator erhält zusätzlich eine Hinweismeldung wie „Load XML ERROR“.
Wie finde ich die genaue Stelle eines XML-Fehlers bei einer XSLT-Transformation?
Die Hinweis-Box nennt die konkrete Position (Zeile und Spalte) des Fehlers in der zu transformierenden Datei. Über den Link „Open XML“ erhalten Sie detailliertere Angaben. Zum konkreten Prüfen können Sie zudem die temporär abgelegte Seite im tmpHTTP-Verzeichnis im Quelltext öffnen (z.B. in Chrome/Firefox über „STRG+U“) und dann die angegebene Zeile/Spalte analysieren. In der Praxis kann die Spaltenangabe leicht abweichen, daher lohnt auch die Suche im Umfeld.
Warum ist Firefox besonders hilfreich bei der Fehlersuche für XML-Fehler?
Firefox ist laut Beschreibung nützlich, weil er XML-Fehler (z.B. in der tmpHTTP-Seite) meist mit einer konkreten Markierung in der Ausgabe anzeigt, sodass Sie die Problemstelle schneller identifizieren können.
Wie werden XML-Fehler innerhalb der bereits generierten Seite angezeigt?
Ab CMS-Version 9.x signalisiert Weblication® als Administrator eingeloggt einen XML-Fehler in der generierten Seite über ein „Ampel-Symbol“ im Weblication® Panel. Durch Klick auf das rote Ampel-Symbol erscheint rechts eine Hinweisbox. Der Link „Diese Seite enthält einen XML-Fehler“ liefert detaillierte Informationen zur Fehlerposition in der generierten Seite.
Wie gehe ich bei XML-Fehlern in der generierten Seite konkret vor?
Die Fehlerinformationen geben die Position (Zeile und Spalte) in der generierten Seite an. Öffnen Sie die temporär abgelegte Seite im tmpHTTP-Verzeichnis im Quelltext (z.B. „STRG+U“ in Chrome/Firefox), gehen Sie zur genannten Zeile/Spalte und prüfen Sie die Ursache. Bei Bedarf suchen Sie im Umkreis, falls die Spaltenzahl nicht exakt passt.
Wie können JavaScript-Definitionen in der generierten Seite XML-Fehler verursachen?
Im Beispiel wird ein XML-Fehler durch eine JavaScript-Definition ausgelöst, die ein kaufmännisches UND (&) enthält. Die Fehlermeldung lautet sinngemäß „xmlParseEntityRef: no name“. Ursache ist dabei, dass Inhalte so interpretiert werden, dass die XML-Syntax verletzt wird (z.B. durch problematische Zeichen im falschen Kontext).
Kann man durch „Suchen & Ersetzen“ die Ursache eines XML-Fehlers schneller finden?
Ja. Laut Hinweis können Sie die relevanten Teile der Fehlermeldung kopieren und in das „Suchen & Ersetzen“-Werkzeug einfügen. Oft lässt sich dadurch durch Auswahl „Nur Suchen“ schnell die Datei lokalisieren, die den Fehler verursacht.
Wie funktioniert die XML-Fehleranzeige im Editor bei aktivierter Conf-Einstellung?
Verfügbar ab Beta-Versionen nach CMS-Version 019.002.000.000: Wenn die Conf-Einstellung gesetzt ist (/wConf/editor/debug/@showXmlError = "1"), weist Weblication® im Editor in der oberen Leiste mit einem roten Balken auf XML-Fehler hin. Bei deaktivierter Conf erfolgt der Hinweis eher unscheinbar im rechten oberen Eck. Ein Klick auf den roten Balken zeigt (z.B. in Firefox) die konkrete Stelle im Quelltext an.
Sind XML-Fehler im Standard-Projekt auch davon betroffen, oder nur projektbezogene Anpassungen?
Beides ist möglich: XML-Fehler können durch Skripte/Templates in der Software verursacht sein oder aus dem Projekt stammen. Softwarebedingte Fehler werden behoben, sobald sie bekannt sind. Ebenso gelten Hinweise, dass XML-Fehler im Standard mit Projekt/Skripten/Templates ebenfalls auftreten können und dann adressiert werden.
Wie gehe ich beim Einbinden von JavaScript in XML- bzw. CDATA-Kontexten korrekt vor (Beispiel & Problemfall)?
Wichtig ist laut Seite: Wenn Javascripts in den Seiten eingesetzt werden und dabei z.B. kaufmännisches UND (&) oder HTML-Code innerhalb des JS-Code vorkommt, muss das einleitende script-Tag mit versehen sein, damit der Bereich in einem CDATA-Bereich ausgegeben wird.
Was ist ein korrektes Beispiel für Facebook Connet (Widget) mit CDATA im script-Tag?
Im Beispiel ist der Unterschied zwischen „Korrekt“ und „Falsch“: Beim korrekten Einbinden wird im script-Tag ein CDATA-Ansatz verwendet (z.B. „/*<![CDATA[*/ … /*]]>*/“). Dadurch wird der JS-Code so ausgegeben, dass er nicht als XML ungünstig interpretiert wird.
Was ist beim falschen Facebook-Connet-Beispiel typischerweise der Unterschied?
Beim falschen Beispiel fehlt die CDATA-Ausgabe im script-Tag (also der CDATA-Block/CDATA-Kontext). Dadurch kann es eher zu XML-Fehlern kommen, weil Zeichen bzw. Inhalte im falschen Kontext als XML interpretiert werden.
Wenn ich das Weblication® Backend direkt aufrufen muss: Welche URL-Struktur wird empfohlen?
Die Seite nennt als Beispiel: http://Ihre-Lizenzierte-Domain/weblication/grid5/scripts/wSystem.php (wobei „Ihre-Lizenzierte-Domain“ durch die jeweilige Lizenzdomain zu ersetzen ist).