내가 쓰는 이유는 BaseX에 약 1k xml의 데이터베이스가 있기 때문입니다. 나는 이미 그것을 청소하고 내가 원하는 정보를 얻었다. 그럼에도 불구하고 해당 데이터를 CSV 형식으로 내보낼 수 있어야합니다. BaseX 문서에 주어진 코드를 사용하여 시도한 결과 다음과 같이 나타났습니다.xml을 BaseX의 XQuery에서 csv로 변환
Desc,Cantidad,Valor,Fecha,Lugar,UUID
,,,,,
,,,,,
그리고 쉼표 사이에 데이터가 표시되어야합니다. 데이터를 표시하려면 코드를 어떻게 수정해야합니까? CSV 직렬화에 필요한
declare namespace tfd="http://www.sat.gob.mx/TimbreFiscalDigital";
declare namespace cfdi= "http://www.sat.gob.mx/cfd/3";
declare option output:method "csv";
declare option output:csv "header=yes, separator=comma";
declare context item := document {
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:detallista="http://www.sat.gob.mx/detallista" xmlns:psgecfd="http://www.sat.gob.mx/psgecfd" xmlns:ecc="http://www.sat.gob.mx/ecc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2" folio="131556" fecha="2014-07-01T08:13:34" noCertificado="00001000000301092647" formaDePago="Pago en una sola exhibicion" subTotal="156.8966" descuento="0.00" Moneda="NAL" total="182.00" tipoDeComprobante="ingreso" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.posadas.com/MFE http://www.posadas.com/MFE/ADDENDAPOSADASVL1.xsd" xmlns:posadas="http://www.posadas.com/MFE" metodoDePago="TARJETA DE CREDITO" NumCtaPago="1093" LugarExpedicion="AVENIDA COSTERA MIGUEL ALEMAN ACAPULCO DE JUAREZ GUERRERO MEXICO">
<cfdi:Emisor rfc="ASO0408178B2" nombre="HOTELES Y VILLAS POSADAS, S.A. DE C.V.">
<cfdi:DomicilioFiscal calle="AVENIDA PASEO DE LA REFORMA" noExterior="155" noInterior="PISO 4" colonia="LOMAS DE CHAPULTEPEC I SECCION" municipio="MIGUEL HIDALGO" estado="DISTRITO FEDERAL" pais="MEXICO" codigoPostal="11000"/>
<cfdi:ExpedidoEn calle="AVENIDA COSTERA MIGUEL ALEMAN" noExterior="97" colonia="FRACCIONAMIENTO CLUB DEPORTIVO" municipio="ACAPULCO DE JUAREZ" pais="MEXICO" codigoPostal="39690" estado="GUERRERO"/>
<cfdi:RegimenFiscal Regimen="NA"/>
</cfdi:Emisor>
<cfdi:Receptor rfc="MER551201D48" nombre="MERCK SA DE CV">
<cfdi:Domicilio calle="CALLE 5 No. 7 FRACC. ALCE BLANCO" municipio="NAUCALPAN DE JUAREZ" estado="ESTADO DE MEXICO" pais="MX" codigoPostal="53370"/>
</cfdi:Receptor>
<cfdi:Conceptos>
<cfdi:Concepto cantidad="1.00" unidad="SERVICIO" noIdentificacion="CONSUM" descripcion="CONSUMO" valorUnitario="156.8966" importe="156.8966"/>
</cfdi:Conceptos>
<cfdi:Impuestos totalImpuestosTrasladados="25.1034">
<cfdi:Traslados>
<cfdi:Traslado tasa="16.00" importe="25.1034" 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" FechaTimbrado="2014-07-01T08:15:15" UUID="8a4f1be7-bdcb-4b22-b144-b3e41dd92e69" version="1.0"/>
</cfdi:Complemento>
<cfdi:Addenda>
<posadas:RequestForPayment>
<posadas:Hoteleria cajero="210" folio="539809" importeaPagar=" 200.00" propina=" 18.00" >
</posadas:Hoteleria>
</posadas:RequestForPayment>
</cfdi:Addenda>
</cfdi:Comprobante>};
for $x in //cfdi:Comprobante,
$y in $x//cfdi:Conceptos/cfdi:Concepto,
$z in $x//cfdi:Complemento/tfd:TimbreFiscalDigital,
$w in $x//cfdi:ExpedidoEn
return
<csv>
<Desc>{$y/@descripcion}</Desc>
<Cantidad>{$y/@cantidad}</Cantidad>
<Valor>{$y/@valorUnitario}</Valor>
<Fecha>{$z/@FechaTimbrado}</Fecha>
<Lugar>{$w/@codigoPostal}</Lugar>
<UUID>{$z/@UUID}</UUID>
</csv>
자동으로 특정 위치로 가져 오는 방법을 알고 계십니까? –
나 자신을 더 잘 설명하게 해줘. 결과를 BaseX에 저장하면 여전히 CSV가 아니라 XML이 표시됩니다. 어떻게 수정할 수 있습니까? –
직렬화는 결과가 인쇄 될 때만 발생합니다. 위의 같은 문서 링크에 설명 된'csv : serialize ($ input as node()) as xs : string' 함수를 통해 문자열에 직렬화를 적용합니다. –