从xml中删除节点属性

时间:2013-10-27 15:34:28

标签: java xml xpath

我有这个例子xml:

<Forms>
<Form Desc="sasld" DocType="1">
    <topmostSubform ind="0">
        <HouseNo ind="0">413</HouseNo>
        <ZipCode ind="0">82051</ZipCode>
        <PostOfficeBox ind="0">0</PostOfficeBox>
    </topmostSubform>
</Form>
<Form Desc="abcd" DocType="1">
    <topmostSubform ind="0">
        <TextField1 ind="24" />
        <TextField1 ind="25" />
        <TextField1 ind="26" />
        <DisContActivity-5-0 ind="0" />
        <DisWithFranActivity-5-0 ind="0" />
    </topmostSubform>
</Form>
<Form Desc="abcd" DocType="5">
    <topmostSubform ind="0">
        <TextField1 ind="24" />
        <TextField1 ind="25" />
    </topmostSubform>
</Form>

我想删除Form类型的所有节点,其DocType属性值为1.

我把这个xml放在Document对象中。

我试过了:

String xpath_string = "//Form[@DocType ='1']";
        XPathExpression xPathExpr = XPATH.compile(xpath_string);
        Object result_obj = xPathExpr.evaluate(document,XPathConstants.NODESET);
        NodeList nodes = (NodeList) result_obj;
        System.out.println(nodes.getLength());
        for(int i=1;i<nodes.getLength();i++)
            document.removeChild(nodes.item(i));

但是它给出了“NOT_FOUND_ERR”。

1 个答案:

答案 0 :(得分:2)

document.removeChild(nodes.item(i));

尝试从文档节点中删除子节点。但是您尝试删除的节点不是文档节点的子节点,它是Forms元素的子节点。试试这个:

nodes.item(i).getParentNode().removeChild(nodes.item(i);

您的for循环也需要从0开始,而不是1,因为DOM节点列表索引是从0开始的。

相关问题