0

我开发了一种在 XML 文件中插入新元素的方法。我正在测试它读取输入文件的第一个元素 Usuario 并将其附加到最后。

输入:

<Usuarios>
        <Usuario>
                <id>identificador</id>
                <email>nn@gmail.com</email>
                <rol>profesor</rol>
                <alta>01/01/2012</alta>
                <baja>30/08/2021</baja>
        </Usuario>
        <Usuario>
                <id>00000000H</id>
                <email>pertur@gmail.com</email>
                <rol>profesor</rol>
                <alta>01/01/2012</alta>
                <baja>30/08/2021</baja>
        </Usuario>
        <Usuario>
                <id>970104</id>
                <email>kk@gmail.com</email>
                <rol>alumno</rol>
                <alta>01/01/2012</alta>
                <baja>30/08/2021</baja>
        </Usuario>
</Usuarios>

输出:

<Usuarios>
        <Usuario>
                <id>identificador</id>
                <email>nn@gmail.com</email>
                <rol>profesor</rol>
                <alta>01/01/2012</alta>
                <baja>30/08/2021</baja>
        </Usuario>
        <Usuario>
                <id>00000000H</id>
                <email>pertur@gmail.com</email>
                <rol>profesor</rol>
                <alta>01/01/2012</alta>
                <baja>30/08/2021</baja>
        </Usuario>
        <Usuario>
                <id>970104</id>
                <email>kk@gmail.com</email>
                <rol>alumno</rol>
                <alta>01/01/2012</alta>
                <baja>30/08/2021</baja>
        </Usuario>
<Usuario>
        <id>identificador</id>
        <email>nn@gmail.com</email>
        <rol>profesor</rol>
        <alta>01/01/2012</alta>
        <baja>30/08/2021</baja>
    </Usuario>
</Usuarios>

我在做什么坏事?有两个问题:

1.- 输入中的元素在输出文件中没有正确缩进。变压器不会重新缩进所有寄存器?2.- 新元素正确缩进,但新实例没有。

想法?

资源:

public void almacenarUsuario(UsuarioNegocio usuario) throws Exception {
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(new File(directorio + "personas.xml"));

    Element nUsuario = (Element) doc.getElementsByTagName("Usuarios").item(0);
    Node node = doc.createElement("Usuario");         
    nUsuario.appendChild(node);         

    Element nid = doc.createElement("id");         
    nid.appendChild(doc.createTextNode(usuario.getIdUsuario()));
    node.appendChild(nid);

    Element nemail = doc.createElement("email");         
    nemail.appendChild(doc.createTextNode(usuario.getEmail()));
    node.appendChild(nemail);

    Element nrol = doc.createElement("rol");         
    nrol.appendChild(doc.createTextNode(usuario.getRol()));
    node.appendChild(nrol);

    Element nalta = doc.createElement("alta");         
    nalta.appendChild(doc.createTextNode(usuario.getFecha_alta()));
    node.appendChild(nalta);

    Element nbaja = doc.createElement("baja");         
    nbaja.appendChild(doc.createTextNode(usuario.getFecha_baja()));
    node.appendChild(nbaja);    

    // Formatter //                                       
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    transformerFactory.setAttribute("indent-number", new Integer(25));
    Transformer transformer = transformerFactory.newTransformer();
    transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");   
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");   
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");   
    transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount","4");        

    DOMSource source = new DOMSource(doc);
    StreamResult result = new StreamResult(new File("/opt/icxp1/Temporal/jose/personal/nuevo.xml"));
    transformer.transform(source, result);
}
4

1 回答 1

3

转型前,

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
于 2012-07-06T12:09:59.183 回答