Je cherchais une méthode générique .Net pour encoder une chaîne pour une utilisation dans un Xml de l'élément ou de l'attribut, et a été surpris quand je n'ai pas immédiatement en trouver un. Donc, avant d'aller trop loin, je pourrais juste être à côté de la fonction intégrée?
En supposant pour un instant qu'il n'existe pas, je suis en train de constituer ma propre générique EncodeForXml(string data)
méthode, et je suis en train de réfléchir à la meilleure façon de le faire.
Les données que je suis sur que vous y êtes invité toute cette affaire pourrait contenir de mauvais caractères &, <, ", etc. Il pourrait aussi contient, à l'occasion, les échappées entités: &, < et ", ce qui signifie simplement à l'aide d'une section CDATA peut-être pas la meilleure idée. Cela semble un peu klunky anyay; je préfère de loin jusqu'à la fin avec une belle chaîne de valeur qui peut être utilisée directement dans le xml.
J'ai utilisé une expression régulière dans le passé et il suffit de prendre de mauvaises arobases, et je pense que je vais l'utiliser pour les attraper dans ce cas, ainsi que de la première étape, et ensuite de faire un simple de remplacer pour les autres personnages.
Donc, cela pourrait être optimisé en outre, sans le rendre trop complexe, et est-ce que je suis absent? :
Function EncodeForXml(ByVal data As String) As String
Static badAmpersand As new Regex("&(?![a-zA-Z]{2,6};|#[0-9]{2,4};)")
data = badAmpersand.Replace(data, "&")
return data.Replace("<", "<").Replace("""", """).Replace(">", "gt;")
End Function
Désolé pour vous tous, C# -seulement les gens-- je n'ai pas vraiment de soins de la langue que j'utilise, mais je voulais faire la Regex statique et vous ne pouvez pas le faire en C# sans la déclarer en dehors de la méthode, ce sera donc VB.Net
Enfin, nous sommes toujours sur .Net 2.0 où je travaille, mais si quelqu'un pouvait prendre le produit final et de le transformer en une extension de la méthode de la classe string, ce serait très cool aussi.
Mise à jour de La première quelques réponses indiquent que .Net, en effet, ont intégré dans les façons de le faire. Mais maintenant que j'ai commencé, je veux finir mes EncodeForXml() la méthode juste pour le fun, donc je suis toujours à la recherche d'idées pour l'améliorer. Notamment: une liste plus complète de caractères qui doit être codé comme des entités (peut-être stockée dans une liste ou une carte), et quelque chose qui obtient de meilleures performances que d'en faire un .Replace() sur les cordes immuables dans la série.