2017-10-06 4 views
0

Je gère une exigence de transformation d'un XML (à partir d'un système hérité), en utilisant XSLT. J'ai rencontré des problèmes avec les tags qui ont le signe dollar (c'est comme cela qu'ils sont stockés et générés dans le système hérité). Exemple d'un fichier XML exemple:Signe dollar d'échappement dans XML/XSLT

<root> 
    <example> 
     <problem$tag>12354</problem$tag>     
    </example> 
    <thisTagIsOK>sunny day</thisTagIsOK> 
</root> 

Ceci est mon xslt:

<?xml version="1.0" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="example"> 
    <xsl:apply-templates select="problem$tag>"/> 
     print stuff 
</xsl:template> 
</xsl:stylesheet> 

J'ai essayé échapper au dollar avec \ et $ deux sans chance.

Quelqu'un peut-il m'aider? Merci

+0

Je ne sais pas $ est xml-DTD AUTORISEE. .. Vous pouvez supprimer le caractère '$' avant le traitement xslt? – GGO

+0

C'est un processus qui est encore en développement, donc il y a encore des chances. Je suis toujours à la recherche d'une solution. Si je trouve une définition qui indique clairement qu'il est illégal d'utiliser $ dans une balise, c'est ma solution. Merci! – noitib

+0

Comme Steve dans son point 2, j'ai suggéré de retirer le prétraitement char xslt. Pas à la génération. – GGO

Répondre

1

Malheureusement, vous ne pourrez pas l'analyser comme c'est le cas avec XSLT car la spécification XML interdit l'utilisation du symbole $ (ainsi que de nombreux autres) dans un nom d'élément. De l'XML specification:

Les symboles ASCII et des signes de ponctuation, avec un groupe assez grand nombre de caractères de symboles Unicode, sont exclus des noms parce qu'ils sont plus utiles comme délimiteurs dans des contextes où les noms XML sont utilisés en dehors documents XML

Je dirais que vos options sont soit:

  1. Modifier le système source, si possible, pour générer com XML
  2. souple Exécutez le fichier XML à travers quelque chose à prétraiter votre XML pour le rendre conforme, par exemple en remplaçant le symbole $ avec un _ (qui est autorisé)
+0

Merci. Si c'est illégal, c'est suffisant pour ce scénario. – noitib