2009-05-06 7 views
0

J'utilise XSLT et j'ai beaucoup de succès avec quelques problèmes.Codage de caractères XSLT - entité non définie

Attention: DOMDocument :: loadXML() [domdocument.loadxml]: Entité 'Aring' non définie dans l'entité

Fondamentalement pour certains caractères non standard que je reçois le type d'erreur ci-dessus. Je veux vraiment régler ça une fois pour toutes. Je connais la cartographie des caractères, mais je ne peux pas écrire toutes les combinaisons possibles de caractères spéciaux.

Répondre

1

Inclure une DTD qui définit les entités, comme this one

Voici un post at PHP.net qui laisse deviner la façon d'inclure ce succès.

La DTD ci-dessus devrait probablement vous couvrir; & Aring; est une entité HTML et la DTD ci-dessus couvre toutes les entités HTML 4.01.

+0

Comment les inclure? Et avez-vous une liste de DTD qui peuvent être pertinentes? – James

+0

\t C'est le code en haut de ma page .xsl, mais le problème persiste Désolé d'être lent si je commets une erreur de base – James

+0

James vous avez besoin du DOCTYPE sur le fichier XML avec les entités dans. –

1

Lorsqu'il est utilisé sans DTD, XML ne prend en charge qu'un nombre très limité d'entités nommées. Si je me souviens bien, pour inclure d'autres caractères hors charset sans utiliser de DTD, il suffit de se référer à eux avec une entité numérique à la place. (<, >, &, et ")

Par exemple, Å correspond au caractère Unicode U + 00C5, "Lettre majuscule latine A avec anneau au-dessus". Vous pouvez donc utiliser Å (les zéros en tête peuvent être omis) pour l'inclure dans votre document. Si vous utilisez Windows, l'outil Carte de caractères (sous XP: Démarrer> Programmes> Accessoires> Outils système) est très utile.

0

& Aring; n'est pas une entité XML standard. Afin de le prendre en charge dans votre document XML, votre analyseur XML doit être sensible à la DTD et le document doit avoir une déclaration DOCTYPE qui définit cette entité ou fait référence à une DTD qui définit cette entité. Une DTD XHTML, par exemple, définit & Aring; pour signifier & # xC5 ;.

Il est correct que votre analyseur DOM XML lève une erreur lorsqu'il voit une entité nommée dont il n'est pas déjà conscient, et que l'analyseur n'est pas compatible DTD ou qu'il n'y a pas de déclaration DOCTYPE pour ce que cette entité signifie . XML lui-même définit les entités & lt ;, & gt ;, & amp; et &. Ce sont les entités nommées qui peuvent être utilisées en toute sécurité dans n'importe quelle application XML.

Si vous écrivez vous-même le document, n'utilisez simplement pas & Aring; - utilisez plutôt un équivalent numérique ou, en supposant que vous utilisez Unicode, utilisez simplement le littéral de caractère.

Si vous devez pouvoir analyser des documents XML d'autres personnes contenant une autre entité nommée, et que les documents n'ont pas de DOCTYPE, alors, comme Frank l'a mentionné, vous devrez fix the document yourself by inserting un DOCTYPE correct après la déclaration XML.

0

Notez qu'il existe également une fonction DOMDocument::loadHTML, qui traite le document en HTML et qui ne déclenchera pas ces entités.

Questions connexes