2011-01-01 28 views
1

OpenXML SDL 2.0を使用してWord文書内の特定の要素のリストを作成しようとしています。私はテンプレートを開いて、使用可能なドキュメントパーツのリストとして使用するすべての "w:sdt"要素のWordテンプレートをスキャンします。私はこのリストをユーザに表示して、希望の部品/要素を選択して、テンプレート文書から新しいバージョン/文書のコピーを構築することができます。OpenXML SDK 2.0 XMLパーツと要素を列挙します

私のリストは、 "w:alias" "val"や "w:tag" "val"だけでなく、DocumentBuilderクラスで使用される順番の要素番号を取得する必要があります。ユーザーに選択オプションを表示するために使用されます。

ユーザが使用可能なテンプレートのXMLパーツを見直して選択したら、DocumentBuilderを使用して識別されたパーツを新しいドキュメントに順次番号で追加します。

私はDocumentBuilderを使用して、文書要素を明示的に識別し、新しい文書を構築するのにシーケンシャルな番号で成功しました。これは美しく動作します。

私は再帰を使用してテンプレート文書を繰り返し、修飾された要素をLISTに追加する必要があることは知っています。私は、まだ十分に精通していないだけでなく、C#またはOpenXML SDKを使用して、目的のXML部品/要素をターゲットとするテンプレート文書を再帰的に呼び出す最も洗練された方法を特定します。

OpenXMLドキュメントの部品/要素のリストを列挙するための適切な例を指摘できますか?

+0

...私は研究しています.Brian Jones&Zeyadのブログ記事「Open XML SDKを使用して大規模なExcelファイルを解析して読む」で提示されたSAX-Likeアプローチを検討する必要があります。これにより、OpenXMLReaderを使用してXMLパーツまたはエレメントをトラバースすることができます。私はこれをどうやって行うのかがはっきりしていないが、行く方法だと思う。 –

答えて

1

パフォーマンス上の理由がない限り、OpenXmlSdkを使用してドキュメントを開き、LINQクエリを実行して各SDT要素を見つけることはできませんか?線に沿って

何か:

using(WordProcessingDocument doc = WordProcessingDocument.Open(byte[], false);){ 

    IEnumerable<SdtContent> sdtElements = doc.MainDocumentPart.Body.Descendants<SdtContent>(); 
    foreach(SdtContent el in sdtElements){ 
     // Collect content tag name/alias 
     // Collect your sequential element number? 
    } 
} 

は私が前にこのアプローチを使用してSdtContent要素のリストを収集するために外部の要素を除外しています。シーケンシャルエレメント番号の意味がわからないのですが?

+0

Damoe、素晴らしい提案。 –

+0

さらに調査したところ、Builderクラスを使用して段落やSDTブロックなどの要素を取得できました。 LINQとOpenXML SDK 2.0を使用して、IEnurmerableオブジェクトでこれらの要素を収集できます。 –

+0

@ damoe - Damoe、次のものを私に助けてくれますか?http://stackoverflow.com/questions/15791732/openxml-sdk-having-borders-for-cell –

関連する問題