2015-12-09 83 views
1

我無法從根元素中刪除元素。下面是XML的例子JDOM從根中刪除元素

<ADMIN-DATA> 
    <DATA-DECLARATION ID="Hi"> </DATA-DECLARATION> 
    <DATA ID="Hi"> 
      <DATA-DECLARATION-REF ID-REF="Hi"> </DATA-DECLARATION-REF> 
       <DATA ID="Hi"> 
         <DATA-DECLARATION ID="Delete"> </DATA-DECLARATION> 
       </DATA> 
    </DATA> 
</ADMIN-DATA> 

我想刪除下面

Element root = document.getRootElement(); 
     String id = null; 
     boolean check = false; 
     String idRef = null; 
     ElementFilter filter = new org.jdom2.filter.ElementFilter(
       "DATA-DECLARATION"); 
     ElementFilter filter2 = new org.jdom2.filter.ElementFilter(
       "DATA-DECLARATION-REF"); 

     for (Element dataDecId : root.getDescendants(filter)) 
     { 
      check = false; 
      id = dataDecId.getAttributeValue("ID"); 
      for (Element dataDecIdRef : root.getDescendants(filter2)) 
      { 
       idRef = dataDecIdRef.getAttributeValue("ID-REF"); 

       if (null != idRef && idRef.equalsIgnoreCase(id)) 
       { 
        check = true; 
        break; 
       } 
      } 
      if (!check) 
      { 
       root.removeContent(dataDecId); 

      } 
     } 

以上root.removeContent(dataDecId)

<DATA-DECLARATION ID="Delete"> </DATA-DECLARATION> 

JDOM代碼;不管用。糾正我。

回答

0

對我來說,它看起來像.xml文件中有一些錯誤。您正嘗試獲取ID-REF字段,而「刪除」只有一個ID。

而且,我懷疑你的XML文件是正確的考慮到你這裏有一個錯字: <DATA-DECLARATION-REF ID-REF="Hi"> </ATA-DECLARATION-REF> 和兩種不同的標籤位置: <DATA-DECLARATION ID="Delete"> </DATA-DECLARATION-REF>

+0

錯字是錯誤的。我只想刪除。 – JavaLearner

1

注意<DATA-DECLARATION ID="Delete"> </DATA-DECLARATION>不是根元素的孩子....這是一個DATA元素這又是一個DATA元件,它最終是ADMIN-DATA元素的子元素的孩子的孩子。

你不能要求根元素刪除DATA-DECLARATION ID="Delete",因爲它不是一個直接的孩子。

注意,孩子本身知道它的位置,所以,更簡單的方式做到這一點,是要改變root.removeContent(dataDecId)是公正dataDecId.detach()

0

另一種方式:

XPATH以明確的方式結合了標籤和值:

XPath xPath = XPathFactory.newInstance().newXPath(); 
String expression="//DATA-DECLARATION[@ID='Delete']"; // self-explained 

NodeList nodes = (NodeList) xPath.compile(expression).evaluate(document, XPathConstants.NODESET); 

for(int i=0; i<nodes.getLength(); i++) 
{ 
Node the_node = nodes.item(i); 

if(the_node instanceof Element) 
    { 
    Element the_element=(Element) the_node; 

    // FATHER 
    Node father=the_node.getParentNode(); 
    // SUPPRESSION 
    father.removeChild(the_node); 

    // First one only ? 
    break; 
    } 
}