2009-10-16 35 views
0

J'ai la DTD pour OFX 1,03 (leur dernière version en dépit d'avoir développé et publié 1,60, mais je digresse ...)Y at-il une meilleure Regex pour l'analyse syntaxique DTD

Je voudrais utiliser regex avoir groupes qui divisent une entité, un élément, d'autres balises dans ses parties pour un traitement ultérieur tel que je prendrais un tag comme ceci:

<!ENTITY % ACCTTOMACRO "(BANKACCTTO | CCACCTTO | INVACCTTO)"> 

Et créer un objet comme celui-ci

nouvelle EntityTag {string Name = " % ACCTTOMACRO "; string [] ChildTypes = nouvelle chaîne [] {"BANKACCTTO", "CCACCTTO", "INVACCTTO"}};

J'ai une expression régulière qui ressemble à ceci:

Regex re = new Regex(@"<!(\b)+([\s\S])?[^>]+>"); 

Certes, je suis nouveau regex, donc je l'ai fait bien jusqu'à obtenir ce qui me donne une collection de correspondance sur la DTD pour chaque tag sans commentaires.

Je voudrais tirer parti du regroupement pour faciliter la création de l'objet mentionné précédemment.

Si je suis dans le mauvais sens, veuillez m'indiquer, mais si vous téléchargez ce document, je pense que vous pourriez trouver que ce n'est pas la norme. (Visual studio jette quelques drapeaux rouges avec la façon dont ce document est formaté)

Je ne m'attends à personne pour aller à la peine, mais pour les curieux voici le link pour télécharger les spécifications.

Répondre

2

On dirait qu'ils ont aussi un schéma disponible. Pourquoi ne pas télécharger le schéma à la place et l'analyser avec un analyseur XML (par exemple, LINQ-to-XML)?

+0

Malheureusement, la version 1.03 est en SGML et non en XML, donc un document de schéma XML n'existe pas pour la branche version 1. C'est aussi dommage, car la version 1.02/1.03 d'OFX est ce que je suis obligé de mettre en œuvre. Heureusement, j'ai un moteur SGMLTag brouillon qui fonctionne. Maintenant je dois le valider. Désolé si je n'étais pas clair sur ma question quant à la version que j'utilisais. –

+0

Il existe un convertisseur gratuit DTD-to-schema à http://www.hitsw.com/xml_utilites/ - Je ne l'ai pas essayé, mais cela ou quelque chose de similaire pourrait aider. – TrueWill

+0

OK .. donc ça fait un moment et maintenant je vais vous donner une mise à jour. J'utilise un peu de main ici. J'ai pris la spécification 2.11 pour OFX et utilisé xsd.exe pour générer du code. Je suis en train de marquer quels éléments sont conformes aux versions utilisant des attributs, puis d'utiliser un objet de couche intermédiaire pour gérer le formatage des balises entre les différentes versions. Bien que votre réponse ne reste pas fidèle à la partie regex de ma question, vous obtenez la réponse pour me donner une direction différente qui a fonctionné! Merci beaucoup! –