解析docx中的隐藏文本

时间:2013-03-28 19:21:31

标签: c# asp.net-mvc

我在MVC 3应用程序中有一个富文本编辑器。它工作正常,除非用户尝试从microsoft word复制文本并粘贴到编辑器中。当发生这种情况时,我会得到像这样的额外隐藏字符

<!--[if gte vml 1]><v:shapetype
 id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
 path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
 <v:stroke joinstyle="miter"/>
 <v:formulas>
  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
  <v:f eqn="sum @0 1 0"/>
  <v:f eqn="sum 0 0 @1"/>
  <v:f eqn="prod @2 1 2"/>
  <v:f eqn="prod @3 21600 pixelWidth"/>
  <v:f eqn="prod @3 21600 pixelHeight"/>
  <v:f eqn="sum @0 0 1"/>
  <v:f eqn="prod @6 1 2"/>
  <v:f eqn="prod @7 21600 pixelWidth"/>
  <v:f eqn="sum @8 21600 0"/>
  <v:f eqn="prod @7 21600 pixelHeight"/>
  <v:f eqn="sum @10 21600 0"/>
 </v:formulas>
 <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
 <o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="Picture_x0020_1" o:spid="_x0000_i1025" type="#_x0000_t75"
 style='width:34.5pt;height:20.25pt;visibility:visible;mso-wrap-style:square'>
</v:shape><![endif]-->

我想在将输入保存到db之前解析所有这些。现在我正在使用正则表达式找到'<!--''-->'之间似乎有效的所有文本,但我觉得这不是最好的方式,而且我不确定是否隐藏了来自docx文件的格式总是这样。有没有更好的方法来摆脱这些额外隐藏的东西?

1 个答案:

答案 0 :(得分:2)

docx使用OpenXML格式,因此您可以尝试使用任何xml parser。例如,对于c# 3.5 and higher,您可以使用Linq-To-Xml,这就是您找到所有评论的方式:

var document = XDocument.Load("test.xml");

var comments =  from node in document.Elements().DescendantNodesAndSelf()
        where node.NodeType == XmlNodeType.Comment
        select node as XComment;