Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms word 如何在WordprocessingML中搜索/替换文本_Ms Word_Wordprocessingml - Fatal编程技术网

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

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

在WordprocessingML(MS Word文档保存的格式)中,是否有任何方法可以轻松搜索文本

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

要存储句子“模块1:某些节标题”,WordprocessingML将XML标记指定为:

  <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重写。