Caractères spéciaux en XML
Je suis entrain de créer un système de navigation de gauche en utilisant xml et xsl. Tout a été va très bien, jusqu'à ce que j'ai essayé d'utiliser un caractère spécial dans mon document xml. Je suis à l'aide de »
et je reçois th erreur.
raison: Référence indéfinie entité "raquo'.
code d'erreur: -1072898046
Comment puis-je faire ce travail?
source d'informationauteur BillZ
Vous devez vous connecter pour publier un commentaire.
Vous tentez d'utiliser un En entité HTML dans un non-HTML ou non-document XHTML. Ces entités sont déclarées dans le document de Définition de Type de Document (DTD).
Vous devez utiliser le numéro de version Unicode de la entité de référence. Par exemple, dans le cas de
»
vous devez utiliser»
Alternativement, vous pouvez définir dans votre document XML de la DTD:
Sinon, si votre document est en UTF-8, je crois que vous pouvez simplement utiliser le caractère réel directement dans votre document XML.
avez-vous préciser un doc type de votre fichier ?
Je pense que vous pourriez obtenir ces erreurs si vous oubliez de le préciser.
Aussi parfois les entités de travail si vous les indiquer par un numéro à la place du nom.
Vous n'avez pas besoin de déclarer une entité dans votre DTD, ou même utilisation une DTD. Vous n'avez probablement pas besoin d'utiliser la représentation Unicode du caractère. Vous certainement n'avez pas besoin d'utiliser une section CDATA.
Ce que vous devez faire est d'utiliser un DOM à construire votre XML au lieu d'essayer de le construire avec la manipulation de la chaîne. Le DOM va résoudre ce problème pour vous.
En C#, ce code:
produit de cette sortie:
Comme vous pouvez le voir dans le premier exemple, le caractère » est parfaitement légal de texte XML. Mais je ne pense pas que vous essayez de représenter ce personnage.
Je pense que vous essayez de faire ce qui est dans le deuxième exemple, basé sur le message d'erreur que vous avez signalé. Vous essayez de représenter la chaîne de caractères
»
. La bonne façon de représenter la chaîne de caractères dans le texte XML est par la fuite de l'esperluette; ainsi:»
.Donc, si vous doit utiliser la manipulation de chaîne de construire votre XML, assurez-vous juste que vous échapper à tout les esperluettes dans votre source de données. De ne pas y revenir, mais si vous utilisez l'un DOM, ce qui aurait été fait pour vous automatiquement.
Une autre chose. Il est très probable que dans votre question initiale, qui se lit maintenant "je suis en utilisant »", ce que vous avez réellement tapé est "je suis à l'aide de »". Le message n'a pas l'air comme ça, mais. Si vous avez besoin de représenter le texte littéralement en markdown, l'enfermer dans backticks; sinon, les entités HTML sont convertis à leur caractère de représentation lorsque le post est rendu.
C'est un problème parce que pas toutes les entités HTML sont des entité XML. Vous pouvez importer la DTD de HTML dans votre document comme Pat, ou, plutôt, effectuez l'une des opérations suivantes:
Remplacer toutes les occurances de caractères spéciaux avec le numérique entité code:
Envelopper tous les événements des caractères spéciaux dans une Balise CDATA
Définir entitys en haut de votre document
Êtes-vous à l'aide du symbole » "directement ou êtes-vous en le définissant comme un" » ? Si vous êtes à l'aide de l'échappé symbole, vous avez oublié le point-virgule?
Joe
Lorsque j'utilise la version unicode montre un carré.
Mettant l'entité decalration dans le document xml produit un "Ne peut pas avoir une déclaration de DTD à l'extérieur d'une DTD." erreur. Je suppose que c'est prévu.
Lorsque j'utilise " pour y inclure la dtd de l'extérieur il ne semble pas avoir d'effet.
Je me demande si ce n'est peut-être un problème de serveur. Je suis en train d'élaborer le présent localement et à l'aide de Bébé Serveur Web.
il suffit de remplacer votre entité HTML
»
avec la référence numérique»
qui est bon en tout XML et HTML.Je me suis retrouvé à googler pour ces info beaucoup, donc décidé de poster une matrice sur mon propre site pour le simple but de rapidement être capable de faire une recherche:
http://martinkool.com/characters
Utiliser le &#...; forme en effet.
Si vous souhaitez que le document de sortie pour contenir le nom des entités HTML
»
plutôt que la référence numérique, ajouter les éléments suivants à votre feuille de style (XSLT2.0 seulement):