3

私の質問はこれです:

次の XML があるとします。

<root>
  <alpha one="start">
    <in>1</in>
  </alpha>
</root>

次に、次のパスを追加します。

<root><alpha one="start"><out>2</out></alpha></root>

その結果、

<root>
  <alpha one="start">
    <in>1</in>
  </alpha>
</root>
<root>
  <alpha one="start">
    <out>2</out>
  </alpha>
</root>

これを次のように変換できるようにしたい:

<root>
  <alpha one="start">
    <in>1</in>
    <out>2</out>
  </alpha>
</root>

自分で実装する以外に (今日車輪を再発明する気はありません)、Xerces (2.8、C++) でそれを行う特定の方法はありますか?

もしそうなら、ノードのマージは DOMDocuments ライフのどの時点で行われますか? 挿入ごとに?ドキュメントの執筆時、明示的に要求に応じて?

ありがとう。

4

2 に答える 2

1

xalan を使用すると、xpath を使用して要素を見つけ、正しい要素に直接挿入することができます。

次のコードは遅いかもしれませんが、属性「one」が「start」に設定されたすべての「ルート」要素を返します。

selectNodes("//root[@one="start"]")

おそらくフルパスを使用する方が良いでしょう

selectNodes("/abc/def/.../root[@one="start"]")

または、すでに親要素が相対的に機能している場合

selectNodes("./root[@one="start"]")

ウィキペディアで xpathの基本的な概念を取得すると思います。

于 2009-06-12T15:10:52.963 に答える
0

色々なタグが存在するコンテナタグの名前さえわかれば、たった1分でできる作業ではないでしょうか。

あなたの例では、すべての XML ドキュメントのタグへのポインターを取得し、alphaそれらのすべてのコンテンツがまだ存在しない場合は、新しいドキュメントのアルファに配置します。

これは、車輪の再発明ほど悪くはありません。私は Xerces には詳しくありませんが、libxml++ を使用すると、これは簡単な作業と言えます。

于 2009-06-07T11:15:17.860 に答える