2012-07-06 135 views
0

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

输入:

<Usuarios> 
     <Usuario> 
       <id>identificador</id> 
       <email>[email protected]</email> 
       <rol>profesor</rol> 
       <alta>01/01/2012</alta> 
       <baja>30/08/2021</baja> 
     </Usuario> 
     <Usuario> 
       <id>00000000H</id> 
       <email>[email protected]</email> 
       <rol>profesor</rol> 
       <alta>01/01/2012</alta> 
       <baja>30/08/2021</baja> 
     </Usuario> 
     <Usuario> 
       <id>970104</id> 
       <email>[email protected]</email> 
       <rol>alumno</rol> 
       <alta>01/01/2012</alta> 
       <baja>30/08/2021</baja> 
     </Usuario> 
</Usuarios> 

输出:

<Usuarios> 
     <Usuario> 
       <id>identificador</id> 
       <email>[email protected]</email> 
       <rol>profesor</rol> 
       <alta>01/01/2012</alta> 
       <baja>30/08/2021</baja> 
     </Usuario> 
     <Usuario> 
       <id>00000000H</id> 
       <email>[email protected]</email> 
       <rol>profesor</rol> 
       <alta>01/01/2012</alta> 
       <baja>30/08/2021</baja> 
     </Usuario> 
     <Usuario> 
       <id>970104</id> 
       <email>[email protected]</email> 
       <rol>alumno</rol> 
       <alta>01/01/2012</alta> 
       <baja>30/08/2021</baja> 
     </Usuario> 
<Usuario> 
     <id>identificador</id> 
     <email>[email protected]</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); 
} 
+1

为什么你关心缩进?这不会以任何方式使XML无效,是吗? – Qnan 2012-07-06 11:13:07

+1

它必须由人读取和缩进帮助... – minyatur 2012-07-06 11:21:15

回答

3

转化之前,

transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
+0

它在那里... '代码' 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(“{xml.apache.org/xalan}indent-amount","4”); DOMSource source = new DOMSource(doc); 'code' – minyatur 2012-07-06 12:43:03

+1

为什么在原始文档中的8位时将缩进量设置为4? – Qnan 2012-07-06 14:24:36

+0

没有特别的原因,但代码无法正常工作 – minyatur 2012-07-07 07:43:47