2009-12-15 4 views
1

J'ai des fichiers de modèles de mots (dot/dotx) qui contiennent des balises XML avec du texte brut.
Lors de l'exécution, je dois remplacer les balises xml par leurs champs de fusion et publipostage respectifs.Regex ou XML Parser C#

Donc, besoin d'analyser le document pour ces balises xml et les remplacer par des champs de fusion. J'utilisais Regex pour trouver et remplacer ces balises xml. Mais il m'a été suggéré d'utiliser XML parser pour analyser les balises XML ([Regex for string enclosed in <*>, C#]).

Le document exemple ressemble à:

Solicitor Letter 

<Tfirm/> 
<Tbuilding/> 
<TstreetNumber/> <TstreetName/> 

For the attention of: <TContact1/> <TEmail/> 


Dear <TContact1/> 

RE: <Pbuilding/> <PstreetNumber/> <PstreetName/> <Pvillage/> <PTown/> 

We were pleased to hear that contracts have now been exchanged in the sale of the 
above property on behalf of our mutual client/s. We now have pleasure in enclosing a 
copy of our invoice for your kind attention upon completion. 

.... 

Une note plus, les crochets sont saisis manuellement par l'utilisateur final dans le modèle.

J'ai essayé d'utiliser XMLReader, mais j'ai eu des erreurs car mes documents ne possèdent pas de racine root.

S'il vous plaît guide si je devrais rester à Regex ou est-il possible d'utiliser XML Parser.

Merci!

+1

Il y a des gens ici qui pensent un analyseur XML doit être utilisé pour tout tâche qui a quelque chose qui ressemble vaguement à XML en elle. Ignore les. Lorsque votre marteau est un analyseur XML, tout ce qui a des parenthèses inclinées ressemble à un clou. –

+1

Les gens ont suggéré un analyseur XML quand ce que vous aviez ressemblé à XML. Mais ici, nous voyons toute l'histoire, et (a) n'est pas XML, et (b) est une langue régulière. Donc une regex sonne bien. – Ken

+0

Est-ce juste moi, ou est-ce que cette lettre se lit comme un de ces courriels de phishing/spam/escroquerie? "Nous sommes heureux d'entendre ..."? "Votre aimable attention"? Quel bureau du gouvernement ou entreprise communique comme ça? Mettez votre propre nom et adresse à la place des marqueurs, et cela ressemble exactement aux messages électroniques que vous recevez pour vous informer que vous avez gagné la loterie britannique. – Cheeso

Répondre

8

À moins que vous ne puissiez le structurer en tant que document XML, les outils dans les bibliothèques .NET pour lire XML seront totalement inutiles.

Ce que vous avez n'est pas XML. Avoir un tag ou deux qui serait qualifié de XML ne fait pas un document XML. Le problème est qu'il ne suit tout simplement pas les règles de XML.

Morale de l'histoire est que vous devrez trouver votre propre méthode pour analyser cela. Si vous aimez boire le kool-aid RegEx, ce sera la meilleure solution pour vous. Bien sûr, il y a beaucoup de façons de peau ce chat.

2

Cela ne me semble pas être un traitement XML. Ce n'est pas un document XML. Cela ressemble à un remplacement direct de chaîne, et pour cela, vous êtes mieux avec une expression régulière.

3

Il semble que vous n'utilisiez pas réellement XML, en utilisant simplement un jeton qui ressemble à du XML comme espace réservé pour le remplacement.

Si c'est le cas, vous devriez utiliser Regex.

0

Un analyseur XML ne vous aide pas à localiser XML; cela ne fait que vous aider à comprendre un morceau donné de XML. Vous aurez besoin d'un autre mécanisme, peut-être un Regex, pour trouver le XML.

3

Je ne suggérerais ni l'un ni l'autre. Microsoft a une bibliothèque gratuite en C# spécifiquement pour modifier les documents au format xml ouvert sans installation de Microsoft Office.

OpenXML SDK

0

Semble que les auteurs de la plupart des réponses na pas lu attentivement la question.

inutan demande quelque chose qui va analyser les documents Word.Si un document Word est enregistré au format docx, il sera en fait un fichier XML qui peut être lu par XML Reader ou XPathReader, mais je ne le recommanderai pas

Normalement, la fusion de courrier avec Word ne nécessite aucune programmation et XML Cependant, si vous voulez toujours avoir des champs de type XML dans vos modèles Word et les remplacer par des valeurs, je vous suggère d'utiliser des objets d'automatisation Word. Ci-dessous un exemple de code VBA, pour un code similaire sur d'autres langues, veuillez vous référer au site de développement de MS Office http://msdn.microsoft.com/en-us/library/bb726434.aspx. Par exemple, si vous utilisez .NET - vous devez utiliser Office INTEROPS et le meilleur de tous est d'installer MS Visual Studio Tools pour le développement de bureau http://msdn.microsoft.com/en-us/library/5s12ew2x.aspx

With Selection.Find 
     .Text = "<TContact1/>" 
     .Replacement.Text = "TContact1" 
     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = False 
     .MatchWildcards = False 
     .MatchSoundsLike = False 
     .MatchAllWordForms = False 
    End With 
    Selection.Find.Execute Replace:=wdReplaceAll