2011-08-11 11 views
1

私は "再解析"したい複雑なXMLツリーを持っています。私がしたいのは、与えられた属性を持つすべてのオブジェクトを取得して(「型」と言う)、それらの間の関係を取得することです。つまり、type属性の要素のみのツリー構造を作り直したいということです。さらに、これはXSLTなどを使用できない理由です。ベースXMLツリーからノード(要素)への参照を新しく作成したオブジェクト(要素を持つ要素)に配置する必要があります。XMLツリーを単純化する - 要素間の関係を取得する

私はcompareDocumentPosition方法を確認したが、ラインの位置にそれが唯一の拠点、木の関係

答えて

1

これは面白いです! 、おそらく、特定の属性を持つすべての要素をXPathを使用して、

  1. を選択し、それを変換します。私は問題を正しく理解していれば、あなたがもしそうなら、私はあなたがこのような何かを行うことができると思い

     
            Root        Root 
           / \       / \ 
           N  T2   --->    T1  T2 
          / \ / \        /
          N T1 T3 N        T3 
    

    を変換したいです

  2. セットにセット
  3. で、それは親がルートまたは選択したノード
  4. 繰り返しFのいずれかであるのですまで、それぞれの葉を上に移動し、ツリーbootomアップウォークされていないすべてのリーフノードを削除しますrom 2.選択されていない葉ノードがなくなるまで
+0

手順2で何を意味するのかよく分かりませんが、唯一のことは疑問です - XPath NodeSetの結果はうまく整理されますか?私の仕事はもっと複雑です - 実際には、左側からノードへの参照を持つ私のカスタムオブジェクトを使って右側に表示するツリーを再作成する必要があります。ツリーを再作成するということは、自分のオブジェクトがツリー項目そのもの(parentNode + childNodes)であることを意味します。ですから、XMLノードに基づいて私のカスタムオブジェクトを生成したいのであれば、それは親がすでに存在していることを確認する必要があります。 –

+0

しかし、与えられたノード(例えば、あなたが述べたセットから取ったもの)が、どのノードが本当の親(与えられた属性を持つ最初の親)かを教えてくれるXPathクエリを持っていれば、すべてがより簡単になります。このクエリは存在しますか? –

+0

ええ、それは 'ancestor :: * [@ type] [1]'のようなものです。すなわち、 'タイプ'属性を持つ '最も近い'祖先 –

0

に私はあなたが任意の制限がある場合はわからないんだけど、それはクラスにXMLを解析するに値するか、いくつかのかもしれませんあなたの与えられたタイプ== fooならXMLを書き直してください

+0

私はフルツリー解析(childList; DFS)を使用することができますが、可能なら使用するとスタイリングがうまくいかない場合があります。 –

+0

属性= "type"の場合は解析できます[このリンクを表示](http://www.mkyong.com/ java/how-to-read-xml-file-in-java-jdom-example /)が助けになるかどうかわからない – Intern87

関連する問題