2016-12-30 108 views
-2

我需要將XML節點作爲獨立XML處理,向節點文檔添加新標籤,使用新節點信息更新原始XML文檔。任何幫助,建議或教程是受歡迎的。將XML節點處理爲獨立的XML文檔並更新原始XML文檔中的節點

這是原始的XML:

<ENVOLVENTE id="ENVOLVENTE"> 
<FirmaEmpresa> 
    <FirmaDonante> 
     <Firma> 
      <Relacion> 
       <RelacionId>32490342093249090234</RelacionId> 
      </Relacion> 
      <Formulario> 
       <Donante> 
        <DonanteNombre>Gloria Robles</DonanteNombre> 
        <DonanteCorreo>[email protected]</DonanteCorreo> 
       </Donante> 
       <Beneficiado> 
        <BeneficiarioPais>USA</BeneficiarioPais> 
        <BeneficiadoCorreo>[email protected]</BeneficiadoCorreo> 
       </Beneficiado> 
       <Fabricantes> 
        <Fabricante> 
         <FabricanteNumeroOrden>1</FabricanteNumeroOrden> 
         <FabricantePais>MX</FabricantePais> 
         <FabricanteCorreo>[email protected]</FabricanteCorreo> 
        </Fabricante> 
       </Fabricantes> 
       <ListaDonaciones> 
        <Donaciones> 
         <DonacionesNumeroOrden>1</DonacionesNumeroOrden> 
         <DonacionesProductoId>nombre</DonacionesProductoId> 
         <DonacionesCantidadDonada>100</DonacionesCantidadDonada> 
         <DonacionesFechaDonacion>2016-12-29T12:21:16</DonacionesFechaDonacion> 
        </Donaciones> 
       </ListaDonaciones> 
      </Formulario> 
     </Firma> 
    </FirmaDonante> 
    <Empresa> 
     <EmpresaPais>MX</EmpresaPais> 
     <EmpresaNombre>Donaciones A.C </EmpresaNombre> 
     <EmpresaDirecccion>AV. REFORMA 1900</EmpresaDirecccion> 
     <EmpresaCiudad>CDXM</EmpresaCiudad> 
    </Empresa> 
    <PermisoEmpresa> 
     <PermisoNumero>329023409324902349023409234</PermisoNumero> 
    </PermisoEmpresa> 
</FirmaEmpresa> 
</ENVOLVENTE> 

現在,我需要的節點 「FirmaDonante」 解壓到一個新的XML DOM:

<FirmaDonante> 
     <Firma> 
      <Relacion> 
       <RelacionId>32490342093249090234</RelacionId> 
      </Relacion> 
      <Formulario> 
       <Donante> 
        <DonanteNombre>Gloria Robles</DonanteNombre> 
        <DonanteCorreo>[email protected]</DonanteCorreo> 
       </Donante> 
       <Beneficiado> 
        <BeneficiarioPais>USA</BeneficiarioPais> 
        <BeneficiadoCorreo>[email protected]</BeneficiadoCorreo> 
       </Beneficiado> 
       <Fabricantes> 
        <Fabricante> 
         <FabricanteNumeroOrden>1</FabricanteNumeroOrden> 
         <FabricantePais>MX</FabricantePais> 
         <FabricanteCorreo>[email protected]</FabricanteCorreo> 
        </Fabricante> 
       </Fabricantes> 
       <ListaDonaciones> 
        <Donaciones> 
         <DonacionesNumeroOrden>1</DonacionesNumeroOrden> 
         <DonacionesProductoId>nombre</DonacionesProductoId> 
         <DonacionesCantidadDonada>100</DonacionesCantidadDonada> 
         <DonacionesFechaDonacion>2016-12-29T12:21:16</DonacionesFechaDonacion> 
        </Donaciones> 
       </ListaDonaciones> 
      </Formulario> 
     </Firma> 
    </FirmaDonante> 

在那之後,我將修改節點作爲新XML文檔,就像這樣,在原始節點之後添加一個新的XML元素。

 <FirmaDonante> 
     <Firma> 
      <Relacion> 
       <RelacionId>32490342093249090234</RelacionId> 
      </Relacion> 
      <Formulario> 
       <Donante> 
        <DonanteNombre>Gloria Robles</DonanteNombre> 
        <DonanteCorreo>[email protected]</DonanteCorreo> 
       </Donante> 
       <Beneficiado> 
        <BeneficiarioPais>USA</BeneficiarioPais> 
        <BeneficiadoCorreo>[email protected]</BeneficiadoCorreo> 
       </Beneficiado> 
       <Fabricantes> 
        <Fabricante> 
         <FabricanteNumeroOrden>1</FabricanteNumeroOrden> 
         <FabricantePais>MX</FabricantePais> 
         <FabricanteCorreo>[email protected]</FabricanteCorreo> 
        </Fabricante> 
       </Fabricantes> 
       <ListaDonaciones> 
        <Donaciones> 
         <DonacionesNumeroOrden>1</DonacionesNumeroOrden> 
         <DonacionesProductoId>nombre</DonacionesProductoId> 
         <DonacionesCantidadDonada>100</DonacionesCantidadDonada> 
         <DonacionesFechaDonacion>2016-12-29T12:21:16</DonacionesFechaDonacion> 
        </Donaciones> 
       </ListaDonaciones> 
      </Formulario> 
     </Firma> 
    </FirmaDonante> 
    <Signature> 
      <SignedInfo/> 
      <KeyInfo/> 
    </Signature> 

最後,我需要添加節點文檔中的原始文件在同一位置,作爲節點,用新的標籤:

<ENVOLVENTE id="ENVOLVENTE"> 
<FirmaEmpresa> 
    <FirmaDonante> 
     <Firma> 
      <Relacion> 
       <RelacionId>32490342093249090234</RelacionId> 
      </Relacion> 
      <Formulario> 
       <Donante> 
        <DonanteNombre>Gloria Robles</DonanteNombre> 
        <DonanteCorreo>[email protected]</DonanteCorreo> 
       </Donante> 
       <Beneficiado> 
        <BeneficiarioPais>USA</BeneficiarioPais> 
        <BeneficiadoCorreo>[email protected]</BeneficiadoCorreo> 
       </Beneficiado> 
       <Fabricantes> 
        <Fabricante> 
         <FabricanteNumeroOrden>1</FabricanteNumeroOrden> 
         <FabricantePais>MX</FabricantePais> 
         <FabricanteCorreo>[email protected]</FabricanteCorreo> 
        </Fabricante> 
       </Fabricantes> 
       <ListaDonaciones> 
        <Donaciones> 
         <DonacionesNumeroOrden>1</DonacionesNumeroOrden> 
         <DonacionesProductoId>nombre</DonacionesProductoId> 
         <DonacionesCantidadDonada>100</DonacionesCantidadDonada> 
         <DonacionesFechaDonacion>2016-12-29T12:21:16</DonacionesFechaDonacion> 
        </Donaciones> 
       </ListaDonaciones> 
      </Formulario> 
     </Firma> 
    </FirmaDonante> 
    <!--NEW TAG --> 
    <Signature> 
      <SignedInfo/> 
      <KeyInfo/> 
    </Signature> 
    <!--NEW TAG --> 
    <Empresa> 
     <EmpresaPais>MX</EmpresaPais> 
     <EmpresaNombre>Donaciones A.C </EmpresaNombre> 
     <EmpresaDirecccion>AV. REFORMA 1900</EmpresaDirecccion> 
     <EmpresaCiudad>CDXM</EmpresaCiudad> 
    </Empresa> 
    <PermisoEmpresa> 
     <PermisoNumero>329023409324902349023409234</PermisoNumero> 
    </PermisoEmpresa> 
</FirmaEmpresa> 
</ENVOLVENTE> 

實際上,我可以提取節點,但我有當我嘗試錯誤添加新元素的節點文檔:

  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     dbf.setNamespaceAware(true); 

     DocumentBuilder builder = dbf.newDocumentBuilder(); 
     InputStream stream = new ByteArrayInputStream(
       xmlFile.getBytes(StandardCharsets.UTF_8)); 
     Document document = builder.parse(stream); 


     Element elementFirmaDonante = (Element) document.getElementsByTagName("FirmaDonante").item(0); 



     DocumentBuilder documentBuilder = dbf.newDocumentBuilder();  
     Document documentoCODExporterMasEH = documentBuilder.newDocument(); 


     Node newNode = documentoCODExporterMasEH.importNode(elementFirmaDonante, true); 
     documentoCODExporterMasEH.appendChild(newNode); 



     /*In this point all is OK, a can serialize de Document, but now, a can't add a new Item to the node document*/ 


     /* 
     * This block, throws error: 
     * HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted. 
     */ 
     Element anotherElement = (Element) document.getElementsByTagName("Empresa").item(0); 
     Node anotherNewNode = documentoCODExporterMasEH.importNode(anotherElement, true); 
     documentoCODExporterMasEH.insertBefore(anotherNewNode, newNode); 

上面的代碼只是爲了測試,我可以添加新的元素或節點到DOM對象。

有什麼建議?

在此先感謝!!!!!

回答

1

請參見下面的代碼,我可以插入Empresa與節點之前一個新的節點: -

Element anotherElement = (Element)document.getElementsByTagName("Empresa").item(0); 
    Element newTag = document.createElement("Signature"); 
    Element childElem1=document.createElement("SignedInfo"); 
    Element childElem2=document.createElement("KeyInfo"); 
    newTag.appendChild(childElem1);newTag.appendChild(childElem2); 
    anotherElement.getParentNode().insertBefore(newTag, anotherElement); 

試圖改變像下面的代碼: -

documentoCODExporterMasEH.insertBefore(newNode,anotherNewNode);