2

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」、「odule 1:」、 「 SomeSectionTitle 」に分割されています。この配置では、文全体を検索することはできません。これを回避する方法はありますか?

明確にするために、私はDomDocumentを使用してPHPでこれを実行しようとしています。

4

2 に答える 2

1

Open XML WordprocessingML ドキュメント内のテキストを検索して置換する方法を示すサンプル コードをいくつか作成しました。私のアプローチは、置き換える必要のあるテキストを含む段落を見つけたら、段落内のすべてのランを 1 文字のランに分割することです。これで、検索文字列に一致する一連の連続実行を簡単に見つけることができます。次に、置換テキストを使用して新しい実行を作成し、検索文字列に一致する単一文字の実行を削除できます。XML DOM (System.Xml.XmlDocument を使用) を使用してこれを実装しました。サンプル コードは、ブログ投稿の「Open XML WordprocessingML ドキュメント内のテキストの検索と置換」にあります。さらに、アルゴリズムがどのように機能するかを示す短いスクリーン キャストを記録しました。 http://www.youtube.com/watch?v=w128hJUu3GM

于 2011-05-12T18:04:23.247 に答える
0

そうです、WordML を直接操作するのと、Word オブジェクト モデルを使用するのとでは、それが苦痛なのです。

残念ながら、それを緩和するものは何も見つかりませんでした (openxml sdk、Aspose などはすべて、基本的に WordML xml を薄いベニアでラップしているように見えます)。

ML でいくつかの限定的な前処理を行い、多くのもの (rsidRPr 要素など) を解決することはできますが、テキストを一貫して検索できるように十分なフォーマット要素を解決することは依然として難しいでしょう。

または、XPATH を使用して w:t 要素だけを抽出し、それらをすべてつなぎ合わせて結果を検索することもできますが、最終的に見つけたものが実際にドキュメント内のどこにあるかを知る方法の問題があります。

それを気にしない場合 (たとえば、データ マイニングだけの場合)、それが最速のソリューションかもしれません。

于 2011-05-03T21:54:30.717 に答える