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>

私は何が悪いのですか?2 つの問題があります。

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 に答える