2011-12-19 15 views
1

私は、以下の構造を持つXMLファイルを持っている:JDOMを使用してJDOMを使用して要素をその属性で削除しますか?

<contacts> 
    <contact id="0"> 
     <firstname /> 
     <lastname /> 
     <address> 
      <street /> 
      <city /> 
      <state /> 
      <zip /> 
      <country /> 
     </address> 
     <phone /> 
     <email /> 
     <continfo> 
      <byemail /> 
      <byphone /> 
      <bymail /> 
     </continfo> 
     <comments /> 
     <datecreated /> 
    </contact> 
</contacts> 

を、私はid属性を調べることにより、全体の接触要素とそのすべての子を削除したいです。しかし、私はこれを理解することにいくつかの問題を抱えています。私は以下を試しました:

Element pageRoot = pageXML.getRootElement(); 

        List<Element> contacts = new ArrayList<Element>(pageRoot.getChildren()); 
        Element contact = null; 

        for(Element element : contacts){ 
         String att = element.getAttributeValue("id"); 
         if(Integer.parseInt(att) == id){ 
          contact = (Element) element.clone(); 
         } 
        } 
pageRoot.removeContent(contact); 

しかし、その連絡先は決して削除されません。誰かが私をある方向に向けることができれば、それは素晴らしいことだろう。ありがとうございました。

答えて

1

なぜ要素をクローンしますか?

あなたは、単にそれを直接削除することができます。

if (...){ 
    elementToRemove = (Element) element; 
} 
... 
pageRoot.removeContent (elementToRemove); 
+0

から構成されている..あなたに感謝。 – Cuthbert

1

要素を除去するためのIterator.remove()を使用する(私の意見に簡単に)推奨されています。これを行うと、子を繰り返し処理して、余分なローカル変数に要素を格納しないようにできます。

List children = root.getChildren("foo"); 
Iterator itr = children.iterator(); 
while (itr.hasNext()) { 
    Element child = (Element) itr.next(); 
    String att = child.getAttributeValue("id"); 
    if(Integer.parseInt(att) == id){ 
    itr.remove(); 
    } 
} 

この例では、あなたはまた、私のかなり愚かだった振り返ってみると、神...あるJDOM faq

関連する問題