我有一些包含xml标签和纯文本的单词模板(点/点xx)文件 在运行时,我需要将xml标记替换为各自的邮件合并字段。
因此,需要解析这些xml标记的文档并将其替换为合并字段。 我正在使用Regex来查找和替换这些xml标签。但我被建议使用XML解析器来解析XML标记([Regex for string enclosed in <*>, 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,但由于我的文档本身没有根标记而出现错误。
请指导我是否应该坚持使用正则表达式,或者是否有任何方法可以使用XML Parser。
谢谢!
答案 0 :(得分:8)
除非您可以将其结构化为XML文档,否则.NET库中用于读取XML的工具将完全无用。
你拥有的不是XML。有一个或两个符合XML条件的标记不是XML文档。问题是它根本不遵循任何XML规则。
故事的道德是你必须提出自己的方法来解析它。如果你喜欢喝RegEx kool-aid,那将是你最好的解决方案。当然,有很多方法可以给这只猫上皮。
答案 1 :(得分:3)
看起来你实际上并没有使用XML,只是使用类似于XML的标记作为替换的占位符。
如果是这种情况,您应该使用正则表达式。
答案 2 :(得分:3)
我不建议。 Microsoft在C#中有一个免费库,专门用于在不安装Microsoft Office的情况下修改打开的xml格式文档。
答案 3 :(得分:2)
对我来说似乎不像XML处理。它不是XML文档。它看起来像直接替换字符串,为此,你最好使用正则表达式。
答案 4 :(得分:0)
XML解析器无法帮助您找到XML;它只能帮助您理解给定的XML片段。您将需要一些其他机制(可能是Regex)来查找XML。
答案 5 :(得分:0)
似乎大多数回复的作者都没有仔细阅读过这个问题。
inutan正在要求解析Word文档的内容。如果Word文档以docx格式保存,它实际上是XML文件,可以由XML Reader或XPathReader读取,但我不建议这样做
通常,与Word合并的邮件不需要任何编程和XML解析,请参阅http://helpdesk.ua.edu/training/word/merg07.html
但是,如果您仍希望在Word模板中使用类似XML的字段并将其替换为值,我建议使用Word自动化对象。
以下是VBA代码的示例,对于其他语言的类似代码,请参阅MS Office开发站点http://msdn.microsoft.com/en-us/library/bb726434.aspx。例如,如果您使用.NET - 您应该使用Office interops,最重要的是安装用于Office开发的MS Visual Studio工具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