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 auf Grundlage der BASE Projektbasis nachfolgend. 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 der 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.

Der Browser Mozilla Firefox ist bei der Anzeige von XML-Fehlern (z.B. tmpHTTP-Seite) sehr nützlich, da er meist die konkrete Stelle auch mit einer Markierung anzeigt.

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 ab CMS-Version 9.x - als Administrator eingeloggt - über ein "Ampel-Symbol" im Weblication® Panel signalisiert. Durch Klick auf das rote Ampel-Symbol wird rechts oben in der Seite die Box mit den Seiteninformationen (siteinfo) 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>
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.

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/@showXmlError = "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.

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)