我需要将一个XML节点处理为独立的XML,向Node Document添加一个新标签,并使用新的节点信息更新原始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文档,类似这样,在原始Node之后添加新的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>
最后,我需要使用新标签将Node文档添加到原始文档中与Node相同的位置:
<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对象添加新的Elements或节点。
有什么建议么 ??
提前致谢!!!!!
参见下面的代码,我能够在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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句