2017-02-08 2 views
-1

Я хочу вывести некоторые данные из счета-фактуры (XML) с помощью Java. Я использую пример по этой ссылке (https://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/) Проблема моя XML не выглядит, как в примере, вот мое:Прочтите конкретные данные из XML с помощью Java (DOM)

<?xml version="1.0" encoding="UTF-8"?> 
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:bfa2="http://www.buzonfiscal.com/ns/addenda/bf/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" NumCtaPago="4007" LugarExpedicion="CUAJIMALPA DE MORELOS,CIUDAD DE MEXICO" metodoDePago="99" tipoDeComprobante="ingreso" total="2490" subTotal="2146.55" fecha="2016-12-14T10:23:08" folio="57318" serie="BT" version="3.2" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.buzonfiscal.com/ns/addenda/bf/2 http://www.buzonfiscal.com/schema/xsd/Addenda_BF_v20.xsd"> 
    <cfdi:Emisor nombre="BEST BUY STORES S. DE R.L. DE C.V." rfc="BBS070606D33"> 
     <cfdi:DomicilioFiscal codigoPostal="05348" pais="MEXICO" estado="CIUDAD DE MEXICO" municipio="CUAJIMALPA DE MORELOS" referencia="EDIFICIO CENTURY PLAZA" colonia="SANTA FE CUAJIMALPA" noInterior="PISO 2 OFNA 202 Y 203 P3 Y P4" noExterior="440" calle="AV. SANTA FE" /> 
     <cfdi:ExpedidoEn codigoPostal="05348" pais="MEXICO" estado="CIUDAD DE MEXICO" municipio="CUAJIMALPA DE MORELOS" colonia="SANTA FE" calle="AVENIDA SANTA FE NO. 440 PISO 2 (OFICINA 203 Y 204),PISO 3 Y PISO 4" /> 
     <cfdi:RegimenFiscal Regimen="Regimen General de Ley Personas Morales" /> 
    </cfdi:Emisor> 
    <cfdi:Receptor nombre="VIALCOMA S.A DE C.V" rfc="VIA8011248W0"> 
     <cfdi:Domicilio codigoPostal="54080" pais="México" estado="Estado de México" municipio="Tlalnepantla de Baz" referencia="VIALCOMA S.A. de C.V." localidad="Tlalnepantla de Baz" colonia="EL MIRADOR" noExterior="107" calle="AV. GUSTAVO BAZ " /> 
    </cfdi:Receptor> 
    <cfdi:Conceptos> 
     <cfdi:Concepto importe="2146.55" valorUnitario="2146.55" descripcion="PANASONIC PHONE KX-PRD260MEB" noIdentificacion="000000001000189023" unidad="PZA" cantidad="1" /> 
    </cfdi:Conceptos> 
    <cfdi:Impuestos totalImpuestosTrasladados="343.45"> 
     <cfdi:Traslados> 
     <cfdi:Traslado importe="343.45" tasa="16.0" impuesto="IVA" /> 
     </cfdi:Traslados> 
    </cfdi:Impuestos> 
    <cfdi:Complemento> 
     <tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigital.xsd" UUID="2e36935c-4948-4f7b-9b29-477546aa2922" version="1.0" /> 
    </cfdi:Complemento> 
    <cfdi:Addenda> 
     <bfa2:AddendaBuzonFiscal version="2.0"> 
     <bfa2:Receptor email="" /> 
     <bfa2:TipoDocumento descripcion="Factura" nombreCorto="FAC" /> 
     <bfa2:CFD totalConLetra="Dos mil cuatrocientos noventa pesos 00/100 M.N." fechaEnvio="2016-12-12T10:42:15-06:00" /> 
     <bfa2:Extra valor="02028001014520161212" atributo="numTicket" /> 
     </bfa2:AddendaBuzonFiscal> 
    </cfdi:Addenda> 
</cfdi:Comprobante> 

Я хочу, чтобы получить (печать на консоли) данные по «folio» «serie» и «UUID»

Может кто-нибудь мне помочь?

+0

Пожалуйста, покажите свой код. Без этого невозможно помочь. – vanje

+0

«Я использую пример по этой ссылке ... Проблема в том, что мой XML не похож на тот, что приведен в примере». Это, по-видимому, иллюстрирует довольно ошибочную стратегию того, как стать опытным в использовании технологии. Вы никогда не освоите программирование, если ваш подход заключается в поиске веб-страницы для примера, который делает именно то, что вы хотите, и затем спрашивайте о SO, если вы не можете его найти. Вам нужно прочитать некоторые книги, освоить концепции, научиться применять их к своим собственным проблемам. –

ответ

0

Следующее должно предоставить ваше желание. Этот пример основан на анализаторе DOM, который вы предоставили.

System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 

    NodeList nList = doc.getElementsByTagName("cfdi:Comprobante"); 

    org.w3c.dom.Node nNode = nList.item(0); 

    System.out.println("folio: " + ((Element) nNode).getAttribute("folio")); 
    System.out.println("serie: " + ((Element) nNode).getAttribute("serie")); 

    NodeList list = doc.getElementsByTagName("cfdi:Complemento"); 
    for (int i = 0; i < 1; i++) { 
    NodeList child = list.item(i).getChildNodes(); 
    for (int j = 0; j < child.getLength(); j++) { 
    if (child.item(j).getNodeName().equals("tfd:TimbreFiscalDigital")) { 
     String uuid = ((Element)(child.item(j))).getAttribute("UUID"); 
     System.out.println("UUID : " + uuid); 
    } 
    } 
    } 

консольный вывод:

Root element :cfdi:Comprobante 
---------------------------- 
folio: 57318 
serie: BT 
UUID : 2e36935c-4948-4f7b-9b29-477546aa2922 
+0

Спасибо большое, он работал так, как я хотел. Теперь с этим примером я могу использовать данные по своему усмотрению. –

Смежные вопросы