Zeichen-Referenzen

Top  Previous  Next

Beispiele > XML > Zeichen-Referenzen

 

Innerhalb eines XML-Elements

 

<text> ... </text>

 

dürfen die Zeichen:

 

< > " ' & $

 

nicht benutzt werden.Sie müssen daher entweder durch eine Namensentität oder eine dezimale Entität codiert werden:

 

Zeichen

Namensentität

Dezimale Entität

<

&lt

&#60

>

&gt

&#62

&

&amp

&#38

"

&quot

&#34

'

&apos

&#39

 

Zur Decodierung dieser Entitäten gibt es im XML-Projekt eine mstrstr-Klassenvariable: m_EntityRefs mit den Werten der ersten beiden Spalten der obigen Tabelle. In der Reference-Produktion werden mit Hilfe von m_EntityRefs die Namensentitäten in die Zeichen übersetzt.

Die entsprechenden dezimalen Entitäten werden in der Aktion zum Token:

 

CharRef ::= &#(\d+);|&#x([0-9a-fA-F]+);

 

behandelt, wo auch Codierungen für andere Sonderzeichen übersetzt werden. Denn auch Zeichen, die nicht zu den ersten 128 Zeichen der ASCII-Tabelle gehören müssen u.U codiert werden. Ob und wie dies nötig ist hängt von encoding-Attribut in XMLDecl ab. Ein vollständiger XML-Parser müsste auf Tabellen für viele mögliche Zeichensätze zugreifen können. Hier wird zur demonstration vorausgesetzt, dass wir es mit dem Standard-Zeichensatz für Westeuropa, Lateinamerika (ISO-8859-1) zu tun haben. Dann können die Zeichen entsprechend der Numerierung der ANSI-Tabelle übersetzt werden.

Der reguläre Ausdruck CharRef erkennt entweder ein Zeichen in dezimaler Codierung und liefert die entsprechende Dezimalzahl als 1. Unterausdruck, oder er erkennt eine Hexadizmalzahl im 2. Unterausdruck.

 

{{

if(xState.length(1))

return ctos(xState.itg(1));

else

if(xState.length(2))

   return ctos(hstoi(xState.str(2)));

else

{

   throw CTT_Error("unknown char reference");

   return str(); // formal return type

}}

 

 

 



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English