JDOM从root中删除元素

时间:2015-12-09 15:07:26

标签: java xml jdom jdom-2

我无法从根元素中删除元素。以下是xml

的示例
 <Grid> 
 <Grid x:Name="VideoHolder"> 
 <vlc:VlcControl /> 
 </Grid> 

 <Grid x:Name="MenuHolder"> 
 <!— content —> 
 </Grid> 
 </Grid> 

我想删除

 <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>

下面的JDOM代码

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

在root.removeContent(dataDecId)之上;不管用。纠正我。

3 个答案:

答案 0 :(得分:1)

请注意<DATA-DECLARATION ID="Delete"> </DATA-DECLARATION>不是根元素的子元素....它是DATA元素的子元素,而DATA元素又是ADMIN-DATA元素的子元素,最后是DATA-DECLARATION ID="Delete"元素的子元素。

您不能要求根元素删除root.removeContent(dataDecId),因为它不是直接的孩子。

请注意,孩子自己知道它的位置,因此,更简单的方法是将dataDecId.detach()更改为=SUMPRODUCT(SUMIFS(Perf_Data[Gross Claims Paid (non-cumulative)],Perf_Data[Year (AY/UWY)],"<"&'OUTPUT - S.19.01'!$A24,Perf_Data[Development Year],">="&Perf_Data[Year (AY/UWY)]+15,Perf_Data[Applicable Line of Business],LoB_Selection),Perf_Data[@[Currency check and multiplier]])

答案 1 :(得分:0)

好吧,对我来说,看起来.xml文件中有一些错误。您正在尝试获取ID-REF字段,而删除仅具有ID。

此外,我怀疑你的XML文件是否正确,因为你有一个拼写错误: <DATA-DECLARATION-REF ID-REF="Hi"> </ATA-DECLARATION-REF> 这里有两个不同的标签: <DATA-DECLARATION ID="Delete"> </DATA-DECLARATION-REF>

答案 2 :(得分: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;
    }
}