Ms word 如何在WordprocessingML中搜索/替换文本
在WordprocessingML(MS Word文档保存的格式)中,是否有任何方法可以轻松搜索文本 我遇到的主要问题是WordprocessingML格式将每个段落分解为“行”,例如: 要存储句子“模块1:某些节标题”,WordprocessingML将XML标记指定为:Ms word 如何在WordprocessingML中搜索/替换文本,ms-word,wordprocessingml,Ms Word,Wordprocessingml,在WordprocessingML(MS Word文档保存的格式)中,是否有任何方法可以轻松搜索文本 我遇到的主要问题是WordprocessingML格式将每个段落分解为“行”,例如: 要存储句子“模块1:某些节标题”,WordprocessingML将XML标记指定为: <w:p w:rsidR="00F9529C" w:rsidRDefault="00F9529C" w:rsidP="00F9529C"> <w:pPr> <w:pStyle
<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
模块1:
部分标题
如您所见,该句子被分为“M”、“模块1:”、“某些章节标题”。这种安排使得不可能搜索整个句子。有什么办法可以解决这个问题吗
为了澄清这一点,我尝试使用DomDocument在PHP中实现这一点 是的,这是直接使用WordML的痛苦,而不是使用word对象模型 不幸的是,我还没有发现任何东西可以简化这一点(openxmlsdk、Aspose等似乎都只是将wordmlxml包装在一个薄薄的表面上) 您可以在ML上执行一些有限的预处理,并解析出许多内容(如所有那些rsidRPr元素等),但要解析出足够多的格式化元素以始终能够搜索文本,仍然很困难 或者,您可以使用XPATH只提取w:t元素,然后将它们串在一起并搜索结果,但接下来您会遇到一个问题,即如何知道您最终在文档中找到的实际位置
如果您不关心这一点(例如,如果您只是数据挖掘),那么这可能是最快的解决方案。我已经编写了一些示例代码,演示了如何搜索和替换打开的XML WordprocessingML文档中的文本。我的方法是:一旦找到包含需要替换的文本的段落,就将段落中的所有行都分解为单个字符的行都。然后,很容易找到与搜索字符串匹配的连续运行集。然后,您可以使用替换文本创建新的运行,然后删除与搜索字符串匹配的单字符运行。我已经使用XMLDOM(使用System.XML.XmlDocument)实现了这一点。您可以在博客文章中找到示例代码。此外,我还录制了一个简短的屏幕,展示了算法的工作原理:哇,这真的需要像@EricWhite这样的人来回答这个问题。谢谢御宅族:)我正在努力。我将用C#编写它,但要仔细记录它的工作原理,希望有人能为PHP和DomDocument重写。