2009-10-31 4 views
2

En utilisant XSLT et XPath 1.0, j'ai une chaîne que je veux échapper pour une utilisation sur une URL, par exemple:URL et l'esperluette

<description>one word &amp; another</description> 

Ainsi, le texte() de l'élément de description devrait obtenir L'URL s'est échappée.

Comment puis-je faire cela?

utilisant C# (XslCompiledTransform) le code serait:

string a = Server.UrlEncode("one word & another"); 

Et produirait:

one+word+%26+another 

Toutes les suggestions?

+1

Votre code ajusté rend une hypothèse invalide. Si vous avez le & dans votre fichier XML et que vous l'analysez avec un lecteur XML, vous ne verrez jamais & dans vos chaînes en mémoire. L'analyseur XML le convertira automatiquement en version non échappée. Donc, à moins que la chaîne dans votre extrait UrlEncode ne soit supprimée du XML en utilisant regex ou quelque chose (ce que vous ne devriez jamais faire), ce n'est pas applicable. – Jherico

+0

Oui, bien sûr, vous avez raison. Comment iriez-vous pour obtenir cette sortie de XSLT? –

Répondre

4

Il n'y a rien construit pour le faire, mais plutôt que de réinventer la roue il y a des feuilles de style déjà en il par exemple:

http://skew.org/xml/stylesheets/url-encode/

les transformations sont simples mais (je l'espère) que quelqu'un d'autre aura fait la mise au point pour vous ...

+0

donc il n'y a vraiment aucun moyen de convertir tout court morceau de texte en lien, facilement? –

+0

Ne pas utiliser XSLT tout seul - c'est un langage de transformation générique, il est donc pas vraiment surprenant. Vous pouvez commencer à mélanger dans d'autres technologies pour simplifier la tâche, par exemple, vous pouvez manipuler le XML source (codeproject.com/KB/cpp/myXPath.aspx) en utilisant Server.UrlEncode après avoir choisi les nœuds d'un XmlDocument avec XPath et pousser le résultat à travers XSLT. Cela dépend vraiment du contexte. – FinnNk

+0

Merci, ces feuilles de style ont énormément aidé. –

2

En XML (et donc XSL) dont vous avez besoin pour échapper à la &,> et < utilisant

&amp; 
&lt; 
&gt; 
+1

+1, bien que vous n'ayez généralement * pas * besoin d'échapper '>'. http://www.w3.org/TR/2008/REC-xml-20081126/#syntax – Tim

+0

Aussi vrai que cela puisse être, cela affaiblit la perception des gens. Il est plus simple (et préférable, probablement) de se rappeler que '>' n'est pas une exception à la règle. – Tomalak

2

Le fragment XML <description>one word & another</description> ressemble, mais l'esperluette nu est illégal. XSL requiert un XML légal.

Une façon de rendre sans effet juridique sur le substituer &amp; est de rendre le texte dans une section CDATA:

<description><![CDATA[one word & another]]></description> 
+0

Absolument correct. J'ai ajusté mon extrait de code pour compenser. Avez-vous une réponse à ma question, qui est en fait sur la façon de remplacer les caractères illégaux d'URL par des caractères valides, c'est-à-dire d'échapper à l'URL du texte? –

+0

C'est correct, mais ce n'est pas une réponse à la question. – elzapp

1

Est-il possible pour vous d'utiliser XSLT 2.0? Je ne mentionne que parce qu'il ya une fonction de codage nifty URL qui trier tous vos problèmes ..

<xsl:value-of select="url:encode('This is URL encoded')" /> 
+0

Je voudrais utiliser XSLT 2 mais je ne suis pas sûr à utiliser pour la mise en œuvre –

+0

.NET Peut-être que cela vous pointera dans la bonne direction: http://stackoverflow.com/questions/94047/are-net-3 -5-XPath-classes-et-méthodes xslt-2-0-compatible –

1

Pour mes fins, aucune de ces solutions a travaillé. Je travaillais dans un cadre exclusif, et en utilisant l'entité:

&#38; 

était la seule façon que j'ai pu ajouter des paramètres supplémentaires à une chaîne URI, dans le cadre d'un modèle XSL.