1

問題の説明: xml ファイルを読み取り、特定のノード (要素) にトラバースし、特定の名前空間宣言がない場合は、必要な名前空間宣言を追加し、ファイルを書き出します。

Microsoft の MSXML DOM API を使用して C++ でこれを行う必要があります。この msdnリファレンスによると、IXMLDOMNode COM オブジェクトの namespaceURI プロパティは読み取り専用です。回避策を高く評価します。

編集:回避策にかなりの時間を費やしました:必要な名前空間を持つ同じドキュメントに新しい兄弟ノードを作成し、元のノードのすべての子要素をこの新しいノードに移動してから、元のノードを削除します。子ノードは以前のデフォルトの名前空間を保持するため、これは機能しません。

そして、この単純なアイデアが私を襲い、うまくいきましたが、将来それが私を噛むかどうかはわかりません.要素に「xmlns」属性を作成して、目的の名前空間値を与えてください! コメントはありますか?

4

1 に答える 1

1

デフォルトの名前空間を要素に追加するつもりだと推測することは、これが厳密に可能ではないことを理解することが最初に重要です。要素の名前が属する名前空間は、完全修飾名を形成するため、デフォルトの名前空間を「追加」することは、要素の名前を変更することと同じです。要素の名前を変更するためのメカニズムが DOM に組み込まれていません。

最も厳密な方法は、修正された XML 出力を生成する変換 (コード内または XSLT 経由) への入力として XML を処理することです。

ただし、現実的な解決策は、RegEx などの文字列処理を使用して要素を見つけ、xmlns 属性を挿入することです。個人的には前者の方が好きです。

于 2009-07-11T21:01:17.850 に答える