Regex или XML Parser C # - PullRequest
       40

Regex или XML Parser C #

1 голос
/ 16 декабря 2009

У меня есть несколько файлов шаблонов слов (точка / точка), которые содержат теги xml вместе с обычным текстом.
Во время выполнения мне нужно заменить теги xml соответствующими полями слияния.

Итак, нужно проанализировать документ на наличие этих тегов xml и заменить их полями слияния. Я использовал Regex, чтобы найти и заменить эти теги XML. Но мне было предложено использовать синтаксический анализатор XML для анализа тегов XML ([ Regex для строки, заключенной в <*>, C # ).

Пример документа выглядит так:

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.

....

Еще одно примечание: угловые скобки вводятся конечным пользователем в шаблон вручную.

Я пытался использовать XMLReader, но получил ошибку, так как мои документы не имеют корневых тегов самостоятельно.

Пожалуйста, указывайте, следует ли мне придерживаться Regex или есть какой-либо способ использовать XML Parser.

Спасибо!

Ответы [ 6 ]

8 голосов
/ 16 декабря 2009

Если вы не сможете структурировать его как документ XML, инструменты в библиотеках .NET для чтения XML будут совершенно бесполезны.

То, что у вас есть, не является XML. Наличие одного или двух тегов, которые можно квалифицировать как XML, не создает XML-документ. Проблема в том, что он просто не следует ни одному из правил XML.

Мораль этой истории в том, что вам придется придумать свой собственный метод для анализа этого. Если вам нравится пить kool-помощь RegEx, это будет лучшим решением для вас. Конечно, есть много способов снять шкуру с этой кошки.

3 голосов
/ 16 декабря 2009

Я бы не предложил ни того, ни другого. У Microsoft есть бесплатная библиотека на C #, специально предназначенная для изменения документов открытого формата XML без установки Microsoft Office.

OpenXML SDK

3 голосов
/ 16 декабря 2009

Похоже, вы на самом деле не используете XML, просто используете токен, который выглядит как XML в качестве заполнителя для замены.

Если это так, вы должны использовать Regex.

2 голосов
/ 16 декабря 2009

Не похоже на обработку XML для меня. Это не документ XML. Это похоже на прямую замену строки, и для этого вам лучше использовать регулярное выражение.

0 голосов
/ 16 декабря 2009

Похоже, что авторы большинства ответов не прочитали вопрос внимательно.

Inutan просит что-то, что будет анализировать документы Word. Если документ Word сохранен в формате docx, это будет фактически файл XML, который можно прочитать с помощью XML Reader или XPathReader, однако я не буду рекомендовать делать это

Обычно слияние почты с Word не требует программирования и анализа XML, см. http://helpdesk.ua.edu/training/word/merg07.html

Однако, если вы все еще хотите иметь XML-подобные поля в шаблонах Word и заменять их значениями, я бы предложил использовать объекты автоматизации Word.

Ниже приведен пример кода VBA, аналогичный код на других языках приведен на сайте разработки MS Office http://msdn.microsoft.com/en-us/library/bb726434.aspx. Например, если вы используете .NET - вы должны использовать взаимодействия Office, и лучше всего установить MS Visual Studio Tools для разработки Office 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
0 голосов
/ 16 декабря 2009

Анализатор XML не поможет вам найти XML; это только поможет вам понять данный кусок XML. Вам понадобится какой-то другой механизм, возможно, Regex, чтобы найти XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...