À l'aide de C# expression Régulière pour remplacer le contenu d'un élément XML
Je suis en train d'écrire du code qui gère la journalisation de données xml et je voudrais être en mesure de remplacer le contenu de certains éléments (par exemple des mots de passe) dans le document. Je préfère ne pas sérialiser et analyser le document en tant que mon code sera le traitement d'une variété de schémas.
Exemple, les documents d'entrée:
doc n ° 1:
<user>
<userid>jsmith</userid>
<password>myPword</password>
</user>
doc n ° 2:
<secinfo>
<ns:username>jsmith</ns:username>
<ns:password>myPword</ns:password>
</secinfo>
Ce que j'aimerais que mon sortie:
sortie de doc n ° 1:
<user>
<userid>jsmith</userid>
<password>XXXXX</password>
</user>
sortie de doc n ° 2:
<secinfo>
<ns:username>jsmith</ns:username>
<ns:password>XXXXX</ns:password>
</secinfo>
Depuis les documents que je vais être le traitement pourrait avoir une variété de schémas, j'espérais venir avec un beau générique de l'expression régulière solution qui pourrait trouver des éléments avec mot de passe en eux et masque le contenu en conséquence.
Puis-je résoudre ce à l'aide d'expressions régulières et de C# ou est-il un moyen plus efficace?
Même si regexs étaient capables de ce (ils ne le sont pas) havng une variété de schéma rend plus nécessaire pour utiliser un parser d'une forme ou d'une autre, pas moins.
OriginalL'auteur Millhouse | 2009-01-15
Vous devez vous connecter pour publier un commentaire.
Ce problème est mieux résolu avec XSLT:
Cela fonctionne pour les deux entrées aussi longtemps que vous gérer les espaces de noms correctement.
Edit : Clarification de ce que je veux dire par "gérer les espaces de noms correctement"
Assurez-vous que votre document source qui a le
ns
préfixe de nom de a comme espace de noms défini pour le document comme suit:OriginalL'auteur Andrew Hare
Je dirais que vous êtes mieux de l'analyse du contenu avec un .NET objet XmlDocument et de trouver le mot de passe éléments à l'aide de XPath, puis en modifiant leurs propriétés innerXML. Il a l'avantage d'être plus correct (depuis le XML n'est pas régulière à la première place), et il est conceptuellement simple à comprendre.
OriginalL'auteur Welbog
De l'expérience avec les systèmes qui tentent d'analyser et/ou de modifier le XML sans analyseurs, permettez-moi de dire: NE PAS le FAIRE. L'utilisation d'un analyseur XML (Il y a d'autres réponses ici qui ont les moyens de le faire rapidement et facilement).
À l'aide de non-xml méthodes pour analyser et/ou de modifier un flux XML sera TOUJOURS vous conduire à la douleur, à un certain moment dans l'avenir. Je sais, parce que j'ai senti que la douleur.
Je sais qu'il me semble qu'il serait plus rapide-à-runtime/plus-de-code plus facile à comprendre/peu importe si vous utilisez l'expression rationnelle de la solution. Mais vous êtes juste de prendre la vie de quelqu'un misérable plus tard.
Il y a très peu de règles absolues qui ne sont pas truffé d'exceptions. "Ne jamais utiliser la manipulation de chaîne d'outils pour analyser ou modifier XML" est l'un d'entre eux.
OriginalL'auteur Michael Kohne
Vous peut utiliser des expressions régulières si vous en savez assez sur ce que vous essayez de match. Par exemple, si vous êtes à la recherche pour toutes les balises qui a le mot "mot de passe" sans intérieur des balises de cette expression expression travail:
Vous pouvez utiliser le même C# instruction de remplacement dans zowat de répondre ainsi, mais pour la remplacer la chaîne de caractères que vous souhaitez utiliser "$1XXXXX$4" à la place.
La Question a été explicitement mentionner les expressions régulières. Pourquoi tout le monde essaie d'offrir impossible la solution à la place?
OriginalL'auteur John Conrad
Regex est pas la bonne approche pour cela, je l'ai vu aller mal lorsque vous y attendez le moins.
XDocument est plus amusant de toute façon:
OriginalL'auteur Kev
Voici ce que j'ai trouvé quand je suis allé avec XMLDocument, il peut ne pas être aussi lisse que XSLT, mais doit être suffisamment générique pour traiter une variété de documents:
OriginalL'auteur Millhouse
La principale raison pour laquelle XSLT peuvent exister, c'est être capable de transformer XML-structures, cela signifie qu'une transformation XSLT est un type de feuille de style qui peut être utilisé pour modifier l'ordre des éléments och modifier le contenu des éléments. Donc c'est une situation typique où son fortement recommandé d'utiliser XSLT à la place de l'analyse comme Andrew Hare dit dans un post précédent.
OriginalL'auteur pelle