Jakich znaków muszę unikać w dokumentach XML?

Jakie znaki muszą być escape'owane w dokumentach XML, lub gdzie mógłbym znaleźć taką listę?

Rozwiązanie

Jeśli użyjesz odpowiedniej klasy lub biblioteki, wykonają one ucieczkę za Ciebie. Wiele problemów z XML jest spowodowanych przez konkatenację łańcuchów.

Znaki ucieczki XML

Jest ich tylko pięć:

"   "
'   '
<   <
>   >
&   &

Unikanie znaków zależy od tego, gdzie znak specjalny jest używany.

Przykłady mogą być zweryfikowane na stronie W3C Markup Validation Service.

Text

Bezpiecznym sposobem jest ucieczka wszystkich pięciu znaków w tekście, jednakże, trzy znaki ", ' i > nie muszą być ucieczką w tekście:

<?xml version="1.0"?>
"'>

Attributes

Bezpiecznym sposobem jest ucieczka wszystkich pięciu znaków w atrybutach, jednakże znak > nie musi być ucieczką w atrybutach:

<?xml version="1.0"?>

Znak ' nie musi być escape'owany w atrybutach, jeśli cudzysłów jest ":

<?xml version="1.0"?>

Podobnie, znak " nie musi być escape'owany w atrybutach, jeśli cudzysłów jest ':

<?xml version="1.0"?>

Komentarze

Wszystkie 5 znaków specjalnych nie mogą być escape'owane w komentarzach:

<?xml version="1.0"?>


CDATA

Wszystkie 5 znaków specjalnych nie mogą być escape'owane w sekcjach CDATA:


<?xml version="1.0"?>
Komentarze (13)

Może to pomoże:

Lista referencji encji znaków XML i HTML:

W dokumentach SGML, HTML i XML stosuje się m.in. Konstrukcje logiczne znane jako znaki dane i wartości atrybutów składają się z sekwencje znaków, w których każdy znak może przejawiać się bezpośrednio (reprezentując siebie), lub może być reprezentowany przez serię znaków zwaną referencją znaku, której istnieją dwa rodzaje: numeryczna odniesienie do znaku i znak odniesienie do encji. W tym artykule wymieniono referencje encji znaków, które są poprawne w dokumentach HTML i XML.

W tym artykule wymieniono pięć następujących predefiniowanych encji XML:

quot  "
amp   &
apos  '
lt    <
gt    >
Komentarze (0)

oprócz powszechnie znanych pięciu znaków [, &, ", '], uciekłbym również od znaku pionowej tabulacji (0x0B). Jest to prawidłowy UTF-8, ale nie prawidłowy XML 1.0, a nawet wiele bibliotek (włączając libxml2) pomija go i po cichu wypisuje nieprawidłowy XML.

Komentarze (0)