删除孩子不工作

时间:2017-05-15 09:27:27

标签: xml android-studio removechild

我有问题。我有一个xml,我想删除一个特定的节点,并且我的代码,我可以看到它,作为System.out,我可以看到我的xml没有该节点,但后来,当我检查xml时,它仍然有节点。 我的代码:

public void borrarelemento(String id_elementoaborrar, String direccion) {
   try {
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            Document documento = documentBuilderFactory.newDocumentBuilder().parse(new File(direccion));

            XPathFactory xPathFactory = XPathFactory.newInstance();
            XPath xPath = xPathFactory.newXPath();
            XPathExpression xPathExpression = xPath.compile("/tabla/elemento[id = " +id_elementoaborrar+" ]");

            Node nodoaborrar=(Node) xPathExpression.evaluate(documento, XPathConstants.NODE);
            nodoaborrar.getParentNode().removeChild(nodoaborrar);



            TransformerFactory transformerFactory=TransformerFactory.newInstance();
            Transformer transformer=transformerFactory.newTransformer();
            transformer.transform(new DOMSource(documento), new StreamResult(System.out));

         finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

其中direccion是xml的路径,而id_elementoaborrar是我想要删除的值。

我的xml:

<tabla> 
Farolas
    <elemento>
        <id> 001 </id>
        <nombre_elemento> Farola1 </nombre_elemento>
        <atributos>
            <atributo>
                <nombre_atributo>Día reparación</nombre_atributo>
                <tipo>Fecha</tipo>
                <valor>23/04/2017</valor>
                <mostrar>No</mostrar>
                <id_elemento>001</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Costo unidad</nombre_atributo>
                <tipo>Numérico con decimales</tipo>
                <valor>2.5</valor>
                <mostrar>No</mostrar>
                <id_elemento>001</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Cantidad</nombre_atributo>
                <tipo>Numérico sin decimales</tipo>
                <valor>1</valor>
                <mostrar>Sí</mostrar>
                <id_elemento>001</id_elemento>
            </atributo>
        </atributos>
    </elemento>
    <elemento>
        <id> 002 </id>
        <nombre_elemento> Farola2 </nombre_elemento>
        <atributos>
            <atributo>
                <nombre_atributo>Día reparación</nombre_atributo>
                <tipo>Fecha</tipo>
                <valor>11-05-2017</valor>
                <mostrar>No</mostrar>
                <id_elemento>002</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Costo unidad</nombre_atributo>
                <tipo>Numérico con decimales</tipo>
                <valor>4.5</valor>
                <mostrar>No</mostrar>
                <id_elemento>002</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Cantidad</nombre_atributo>
                <tipo>Numérico sin decimales</tipo>
                <valor>3</valor>
                <mostrar>No</mostrar>
                <id_elemento>002</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Descripción</nombre_atributo>
                <tipo>Texto</tipo>
                <valor>Farola de la calle mayor de Valdeluz</valor>
                <mostrar>No</mostrar>
                <id_elemento>002</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Coordenadas de la farola</nombre_atributo>
                <tipo>Coordenadas</tipo>
                <valor>(40.541,-3.27521)</valor>
                <mostrar>No</mostrar>
                <id_elemento>002</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Foto de la farola</nombre_atributo>
                <tipo>Foto</tipo>
                <valor>sd/Farola1</valor>
                <mostrar>No</mostrar>
                <id_elemento>002</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Día segunda reparación</nombre_atributo>
                <tipo>Fecha-hora</tipo>
                <valor>12-05-2017 11:21:54</valor>
                <mostrar>No</mostrar>
                <id_elemento>002</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Día tercera reparación</nombre_atributo>
                <tipo>Fecha-hora</tipo>
                <valor>12-05-2017 11:58:11</valor>
                <mostrar>No</mostrar>
                <id_elemento>002</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Día cuarta reparación</nombre_atributo>
                <tipo>Fecha-hora</tipo>
                <valor>12-05-2017 12:32:42</valor>
                <mostrar>No</mostrar>
                <id_elemento>002</id_elemento>
            </atributo>
        </atributos>
    </elemento>
    <elemento>
        <id> 003 </id>
        <nombre_elemento> Farola3 </nombre_elemento>
        <atributos>
            <atributo>
                <nombre_atributo>Día montaje</nombre_atributo>
                <tipo>Fecha</tipo>
                <valor>15/05/2017</valor>
                <mostrar>No</mostrar>
                <id_elemento>003</id_elemento>
            </atributo>
            <atributo>
                <nombre_atributo>Costo</nombre_atributo>
                <tipo>Numérico con decimales</tipo>
                <valor>40</valor>
                <mostrar>No</mostrar>
                <id_elemento>003</id_elemento>
            </atributo>
        </atributos>
    </elemento>
</tabla>

1 个答案:

答案 0 :(得分:0)

好的,已经找到了答案,我做错了,而不是这个:

    transformer.transform(new DOMSource(documento), new StreamResult(System.out));

我应该这样说:

 transformer.transform(new DOMSource(documento), new StreamResult(direccion));