对我来说总是很难理解(特别是在英语中,这不是我的第一语言)解释,我的问题是什么,所以我提前抱歉错综复杂或过分琐碎;)。使用MS Word XML
我需要做的是以特定的方式“解析”Word XML文档。转换为xml的文件有一些部分将放置在某些固定标记(如[...]或/ * ... * /或其他任何东西)之间,我需要它们分别保留为一个文本块,而Word来自:
[SOME_TEXT.SOME_OTHER_TEXT]
使得类似:
<w:r>
<w:rPr><not relevant /></w:rPr>
<w:t>
[SOME_TEXT.
</w:t>
</w:r>
<w:r>
<w:rPr><not relevant /></w:rPr>
<w:t>
SOME_OTHER_TEXT
</w:t>
</w:r>
<w:r>
<w:rPr><not relevant /></w:rPr>
<w:t>
]
</w:t>
</w:r>
,而不是如:
<w:r>
<w:rPr><not relevant /></w:rPr>
<w:t>
[SOME_TEXT.SOME_OTHER_TEXT]
</w:t>
</w:r>
我试图Application.Options.StoreRSIDOnSave设置为false,使用普通格式的所有文本,关掉咒语cking等,但Word仍然“随机”分割一些字符串(尤其是当他们从别的地方粘贴,而不是用手写的时候) - 而且我不能告诉人们,谁来创建这些XML文档,做一百个其他的之前他们可以在我的应用程序中使用他们的文件。所以我需要照顾自己准备文件。我想知道什么是最好的和尽可能简单的解决方案来做到这一点 - 通过XmlDocument阅读,通过节点循环,并删除它们注意关闭那些需要关闭,并把*/* /干净之间或做同样的事情,但通过阅读纯文本文件。或者,也许有人有一些更好的想法(像一些聪明的正则表达式;))?我会非常感谢所有的帮助。
//编辑 我设法解决了这个问题。我的解决办法也许是有点“瘸”,但完美的作品;)
Dim MyMarkedString As Boolean = False
Dim MyTextOpened As Boolean = False
Dim MyFile As String = File.ReadAllText(pFileName)
Dim MyFileCopy As String = String.Empty
For Each foundPart As Match In Regex.Matches(MyFile, "((<\??/?)(?:[^:\s>]+:)?(\w+).*?(/?\??>))|(?!<)(\[?((?!<).)+\]?)")
If (foundPart.Value.Equals("<w:t>") OrElse foundPart.Value.Contains("<w:t ")) AndAlso Not MyMarkedString Then
MyTextOpened = True
MyFileCopy += foundPart.Value
ElseIf (foundPart.Value.Equals("</w:t>") OrElse foundPart.Value.Contains("</w:t ")) AndAlso Not MyMarkedString Then
MyTextOpened = False
MyFileCopy += foundPart.Value
ElseIf (foundPart.Value.Equals("<w:t>") OrElse foundPart.Value.Contains("<w:t ")) AndAlso MyMarkedString Then
MyTextOpened = True
MyFileCopy += ""
ElseIf (foundPart.Value.Equals("</w:t>") OrElse foundPart.Value.Contains("</w:t ")) AndAlso MyMarkedString Then
MyTextOpened = False
MyFileCopy += ""
Else
If MyTextOpened AndAlso Not MyMarkedString Then
If foundPart.Value.Contains("[") AndAlso Not foundPart.Value.Contains("]") Then MyMarkedString = True
MyFileCopy += foundPart.Value
ElseIf MyTextOpened AndAlso MyMarkedString Then
If foundPart.Value.Contains("]") AndAlso Not foundPart.Value.Contains("[") Then MyMarkedString = False
MyFileCopy += foundPart.Value
ElseIf Not MyTextOpened And MyMarkedString Then
MyFileCopy += ""
Else
MyFileCopy += foundPart.Value
End If
End If
Next
File.WriteAllText(pCopyName, MyFileCopy)
其实我试图想出一些正则表达式,我可以用 - 希望这不是一个黑暗的角落;) – brovar 2009-11-23 10:36:19
我也发现了这个问题,也许它可以帮助:HTTP:// stackoverflow.com/questions/121656/regular-expression-to-remove-xml-tags-and-their-content – Bobby 2009-11-23 10:52:57