カスタム XML マークアップを .NET で扱う方法
カスタム XML マークアップを .NET で扱う方法
Word 文書は、表示コンテンツと並行してカスタム XML データを保持できます — コンテンツ コントロールをバインドしたり、アプリケーション固有のメタデータを保存したり、別のアプリケーションが追加したパーツを埋め込むために使用されるデータです。このガイドでは、そのデータの読み取り方法、新しいカスタム XML パーツの追加方法、そして古い文書にまだ含まれている可能性のあるレガシー スマート タグの検査方法を、CustomXmlPart、CustomXmlProperty、および SmartTag を利用して、Aspose.Words FOSS for .NET で示します。
ステップバイステップ ガイド
ステップ 1: 文書からカスタム XML データを読み取る
Document.CustomXmlParts は CustomXmlPartCollection を返します — これは Word が XML にマップされたコンテンツ コントロールをサポートする際に使用するのと同じメカニズムです。コレクションを反復処理するか、必要なパーツが既に分かっている場合は GetById(id) を呼び出して CustomXmlPart を取得します。各パーツは Id を公開し、これは生の XML を保持する Data バイト配列、完全なバイト比較を行わずにデータの変更を検出するための DataChecksum、そして Schemas — それに関連付けられた XML スキーマを列挙する CustomXmlSchemaCollection です。
ステップ 2: カスタム XML パーツを追加または更新する
id文字列とXMLコンテンツを使用してCustomXmlPartCollection.Add(id, xml)を呼び出し、直接パートを作成するか、CustomXmlPartを別途構築してAdd(part)に渡します。データを削除するには、特定の位置でRemoveAt(index)を使用するか、すべてのパートを削除するためにClear()を使用します。ドキュメント間でカスタムXMLデータをコピーする場合、元のパートでCustomXmlPart.Clone()(またはコレクションのClone())を使用し、生のXMLを再読み取りして再追加するのではなく、クローンをターゲットドキュメントのDocument.CustomXmlPartsに追加します。
ステップ3:パートに関連付けられたスキーマを管理する
CustomXmlPart.SchemasはCustomXmlSchemaCollectionに到達し、パートに関連付けられたスキーマURIを解析されたスキーマオブジェクトではなくプレーンな文字列として追跡します。Add(value)を使用してスキーマURIを登録し、Remove(name)またはRemoveAt(index)で削除し、IndexOf(value)で検索し、Clear()ですべて削除します。Countは現在パートに関連付けられているスキーマURIの数を報告します。
ステップ4:パッケージレベルのカスタムパートを操作する
OOXMLパッケージ内のすべての非表示パートがカスタムXMLというわけではありません。Document.PackageCustomPartsはCustomPartオブジェクトのCustomPartCollectionを返します——ファイルに手を加えた別のアプリケーションが追加したパートなど、パッケージに格納された任意のパートです。各CustomPartはName、ContentType、RelationshipType、Dataバイト配列、そして埋め込みコンテンツではなく外部参照であるかを示すIsExternalフラグを持ちます。Add(part)、RemoveAt(index)、およびClear()はCustomXmlPartCollectionと同様の方法でコレクションを管理します。ドキュメントが保持すべきパートがカスタムXMLコレクションに表示されない場合は、PackageCustomParts(CustomXmlPartsではなく)を確認してください。
ステップ5:レガシー・スマートタグとそのプロパティを検査する
SmartTagは、認識されたテキストを囲むレガシーWordスマートタグを表すノード型(NodeType.SmartTag、SmartTag(doc)で構築)です。ElementとUriを併せて確認し、どのリコグナイザがタグを作成したかを特定し、次にProperties(CustomXmlPropertyCollection)を読み取り、リコグナイザが付与した構造化データを取得します。CustomXmlPropertyCollection内では、インデクサ(例:properties["MyProp"])またはContains(name)が特定のプロパティを検索し、IndexOfKey(name)がその位置を返し、Remove(name)/RemoveAt(index)/Clear()がエントリを削除します;各CustomXmlPropertyはCustomXmlProperty(name, uri, value)で構築され、Name、Uri、Valueを公開します。SmartTagはCompositeNodeから派生しているため、他のノードと同様にドキュメントツリーに参加し、DocumentVisitorベースの走査のためにAccept(visitor)、AcceptStart(visitor)、AcceptEnd(visitor)をサポートします。
一般的な問題と対策
CustomXmlPartCollection.GetById(id) 使用できるものが何も返されません。 ID が現在存在するいずれのパートとも一致しません Document.CustomXmlParts. コレクションを列挙して ID が存在することを確認するか、先に次の方法でパートを追加してください Add(id, xml).
別のアプリケーションで追加されたパートは、反復処理で見つかりません CustomXmlParts. Non-XML パッケージ パーツは次を通じて公開されます Document.PackageCustomParts, ではなく CustomXmlParts. 確認してください PackageCustomParts (a CustomPartCollection) 代わりに。
SmartTag.Properties タグが明確に存在しているにもかかわらず、空です。 すべてのスマートタグ認識子が構造化プロパティを付与するわけではありません。Check SmartTag.Element and Uri 特定のプロパティが存在すると仮定する前に、どの認識子がタグを作成したかを確認してください。
カスタム XML データは、バインドされるべきコンテンツコントロールと関連していないようです。 コンテンツコントロールは、独自のデータバインディング設定を通じてカスタム XML にバインドされますが、すべてに自動的にバインドされるわけではありません。 CustomXmlPart in Document.CustomXmlParts. 特定のコンテンツコントロールが実際にどの部分にバインドされているかを確認し、一対一の関係を前提としないでください。
よくある質問
カスタム XML データをドキュメントに追加するにはどうすればよいですか?
Document.CustomXmlParts.Add(id, xml) を id 文字列と XML コンテンツで呼び出すか、CustomXmlPart を別途作成して Add(part) に渡してください。
CustomXmlPart と CustomXmlProperty の違いは何ですか?
CustomXmlPart は、XML データアイランド全体(バイト配列のペイロードとそれに関連するスキーマ)で、Document.CustomXmlParts を介して取得します。CustomXmlProperty は単一の名前/値ペアで、通常はドキュメントから直接ではなく SmartTag.Properties を介して取得されます。
カスタム XML データをあるドキュメントから別のドキュメントへコピーするにはどうすればよいですか?
ソース CustomXmlPart に対して Clone() を呼び出し、次にクローンを Add(part) を使用してターゲットドキュメントの Document.CustomXmlParts に追加します。
SmartTag とは何ですか、またそれに遭遇するのはどんなときですか?
SmartTag は、スマートタグ認識子によって認識され囲まれたテキストを表すレガシーな Word 機能です — NodeType.SmartTag というドキュメントノードで、認識子を特定する Element と Uri を持ち、さらに CustomXmlProperty 値の Properties コレクションを含みます。これは、古い Word バージョンでスマートタグが有効になっている状態で作成または編集されたドキュメントに現れます。
ドキュメントにカスタム XML パーツまたはパッケージパーツがいくつあるかは、どうやって確認できますか?
それぞれ、Document.CustomXmlParts(CustomXmlPartCollection)上の Count を読み取るか、Document.PackageCustomParts(CustomPartCollection)を読み取ります。