2011-06-20 1 views
0

私は、次のXML構造を持っている:クローンをXML(JDom)に配置する正確な位置を取得する方法を教えてください。

<S i="0" id="S1"> 
    <W C="JJ" id="W1" o1="0" o2="8">Dominant</W> 
    <W C="NN" id="W2" o1="9" o2="21">contribution</W> 
    <W C="IN" id="W3" o1="22" o2="24">of</W> 
    <Term allvalues="PA123:GNX" type="GNX" values="PA123"> 
     <W C="NN" id="W4" o1="25" o2="29">P450</W> 
    </Term> 
    <W C="NN" id="W5" o1="30" o2="33">3A4</W> 
    <W C="TO" id="W6" o1="34" o2="36">to</W> 
    <W C="DT" id="W7" o1="37" o2="40">the</W> 
    <W C="JJ" id="W8" o1="41" o2="48">hepatic</W> 
    <W C="NN" id="W9" o1="49" o2="61">carcinogenic</W> 
    <W C="NN" id="W10" o1="62" o2="72">activation</W> 
    <W C="IN" id="W11" o1="73" o2="75">of</W> 
    <Term allvalues="PA452609:DRUG" type="DRUG" values="PA452609"> 
     <W C="NN" id="W12" o1="76" o2="85">aflatoxin</W> 
     <W C="NN" id="W13" o1="86" o2="88">B1</W> 
    </Term> 
    <W C="." id="W14" o1="88" o2="89">.</W> 
    </S> 

は私の仕事は、用語タグを削除することであるが、Wタグを保ちます。私はWをクローン化しましたが、Sにそれらを追加するとき、正しい位置を推測する方法はわかりません。

private void deleteInsideTerms(Element element){ 
    List allChildren = element.getChildren(); 
    for(int i = 0; i<allChildren.size(); i++){ 
     Element child = (Element) allChildren.get(i); 
     if(child.getName().equalsIgnoreCase("term")){ 
         List<Element> listW = child.getChildren("W"); 
         for(int in = 0; in<listW.size(); in++){ 
           Element clone = (Element) listW.get(in).clone(); 
           child.getParentElement().addContent(**???**, clone); 
         } 
        else 
      deleteInsideTerms(child); 
    } 

}

誰もが、私はインデックスとして挿入する必要が何を知っていますか?おかげさまで

答えて

0

あなたはその位置を推測する必要はありません。このような場合は、すべてのコンテンツを削除してから、削除するアイテムをスキップして戻す方が簡単です(クローニングも回避されます)。

Element s = doc.getRootElement(); 
    List<Content> cl = s.removeContent(); 
    for (Content c : cl) { 
     if (c instanceof Element && ((Element) c).getName().equals("Term")) { 
      List<Content> sublist = ((Element) c).removeContent(); 
      for (Content w : sublist) { 
       if (w instanceof Element 
         && ((Element) w).getName().equals("W")) { 
        s.addContent(w); 
       } 
      } 
     } else { 
      s.addContent(c); 
     } 
    } 

OTOHこれはもっと一般的なタスクの単なる例であれば、代わりにXSLを使用することを検討してください。

+0

お返事ありがとうございます!問題は、プロジェクトのほんの一部であり、jdomを使ってすべてを実装したことです。正しいインデックスを計算する方法はありませんか? – Daniela

+0

もう一度ありがとう!私はそれを解決child.getParentElement()。addContent(** ??? **、クローン); child.getParentElement()。getChildren()。add(i + in、clone); – Daniela

関連する問題