首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在WordprocessingML中搜索/替换文本

如何在WordprocessingML中搜索/替换文本
EN

Stack Overflow用户
提问于 2011-05-03 14:36:29
回答 2查看 1.1K关注 0票数 2

在WordprocessingML ( MS文档保存的格式)中,是否可以轻松地搜索文本?

我遇到的主要问题是,WordprocessingML格式将每一段分解为“运行”,例如:

为了存储语句“Module1: Section”,WordprocessingML指定了以下标记:

代码语言:javascript
复制
  <w:p w:rsidR="00F9529C" w:rsidRDefault="00F9529C" w:rsidP="00F9529C">
   <w:pPr>
    <w:pStyle w:val="Heading1_5019"/>
   </w:pPr>
   <w:bookmarkStart w:id="0" w:name="_Toc247333659"/>
   <w:r>
    <w:t>M</w:t>
   </w:r>
   <w:r w:rsidRPr="007D2739">
    <w:t xml:space="preserve">odule 1: </w:t>
   </w:r>
   <w:r>
    <w:t>Some Section Title</w:t>
   </w:r>
   <w:bookmarkEnd w:id="0"/>
  </w:p>

正如你所看到的,这个句子被分成"M“、"odule 1:”、“ Section ”。这种安排使得找不到整个句子。有什么可以绕开的吗?

为了澄清,我试图使用DomDocument在PHP中实现这一点。

EN

回答 2

Stack Overflow用户

发布于 2011-05-12 18:04:23

我编写了一些示例代码,演示如何在Open文档中搜索和替换文本。我的方法是:一旦找到了包含需要替换的文本的段落,就可以将段落中的所有运行拆分为单个字符的运行。然后,很容易找到与搜索字符串匹配的连续运行集。然后,可以使用替换文本创建一个新的运行,然后删除与搜索字符串匹配的单个字符运行。我使用XML (使用System.Xml.XmlDocument)实现了这一点。您可以在博客文章搜索和替换打开的XML WordprocessingML文档中的文本中找到示例代码。此外,我还录制了一个简短的屏幕放映,展示了该算法的工作原理:http://www.youtube.com/watch?v=w128hJUu3GM

票数 1
EN

Stack Overflow用户

发布于 2011-05-03 21:54:30

是的,这就是直接使用WordML的痛苦,而不是使用word对象模型。

不幸的是,我没有发现任何可以简化的事情( openxml、Aspose等等似乎基本上都只是将WordML xml封装在一个薄薄的单板上)。

您可以在ML上做一些有限的预处理,并解析出很多东西(比如所有的rsidRPr元素等等),但是要解析出足够多的格式元素来始终搜索文本仍然是很棘手的。

或者,您可以使用XPATH只提取w:t元素,然后将它们串在一起并搜索结果,但接下来您就会遇到一个问题,即如何知道文档中最终发现的是什么是实际存在的。

如果您不关心这一点(例如,如果您只是数据挖掘),那么这可能是最快的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5871170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档