在BaseX中将xml从XQuery转换为csv

在BaseX中将xml从XQuery转换为csv,xml,csv,xquery,basex,flwor,Xml,Csv,Xquery,Basex,Flwor,我之所以写这篇文章,是因为我在BaseX中有一个大约1k XML的数据库。我已经清理过了,得到了我想要的信息。不过,我希望能够以CSV格式导出该数据。当我尝试使用BaseX文档中给出的代码时,它告诉我: Desc,Cantidad,Valor,Fecha,Lugar,UUID ,,,,, ,,,,, 它应该显示逗号之间的数据。 我要问的是,我应该如何修改我的代码以使数据显示出来 我的代码如下: declare namespace tfd="http://www.sat.gob.mx/Timbr

我之所以写这篇文章,是因为我在BaseX中有一个大约1k XML的数据库。我已经清理过了,得到了我想要的信息。不过,我希望能够以CSV格式导出该数据。当我尝试使用BaseX文档中给出的代码时,它告诉我:

Desc,Cantidad,Valor,Fecha,Lugar,UUID
,,,,,
,,,,,
它应该显示逗号之间的数据。 我要问的是,我应该如何修改我的代码以使数据显示出来

我的代码如下:

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>
声明命名空间tfd=”http://www.sat.gob.mx/TimbreFiscalDigital";
声明命名空间cfdi=”http://www.sat.gob.mx/cfd/3";
声明选项输出:方法“csv”;
声明选项输出:csv“标题=是,分隔符=逗号”;
声明上下文项:=文档{
};
成本为x美元/立方英尺/平方英尺:,
$x中的$y//cfdi:Conceptos/cfdi:Concepto,
$x中的$z//cfdi:Complemento/tfd:digital,
$x中的$w//cfdi:ExpedidoEn
返回
{$y/@descripion}
{$y/@cantidad}
{$y/@valorUnitario}
{$z/@FechaTimbrado}
{$w/@codigoPostal}
{$z/@UUID}

文档中描述了CSV序列化所需的XML。BaseX文档中的示例如下:

<csv>
  <record>
    <Name>Huber</Name>
    <First_Name>Sepp</First_Name>
    <Address>Hauptstraße 13</Address>
    <City>93547 Hintertupfing</City>
  </record>
</csv>

在编辑器中打开文件并替换所有您知道如何自动将其导入特定位置的文件?让我更好地解释一下。当您将结果存储在BaseX中时,它仍然表示它是XML,而不是CSV。我如何修改它?序列化只在打印结果时发生。您可以通过上面同一文档链接中描述的
csv:serialize($input as node())as xs:string
函数对字符串强制序列化。
<csv>
  <Desc descripcion="CONSUMO"/>
  <Cantidad cantidad="1.00"/>
  <Valor valorUnitario="156.8966"/>
  <Fecha FechaTimbrado="2014-07-01T08:15:15"/>
  <Lugar codigoPostal="39690"/>
  <UUID UUID="8a4f1be7-bdcb-4b22-b144-b3e41dd92e69"/>
</csv>
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><record>
    <Desc>{$y/@descripcion/data()}</Desc>
    <Cantidad>{$y/@cantidad/data()}</Cantidad>
    <Valor>{$y/@valorUnitario/data()}</Valor>
    <Fecha>{$z/@FechaTimbrado/data()}</Fecha>
    <Lugar>{$w/@codigoPostal/data()}</Lugar>
    <UUID>{$z/@UUID/data()}</UUID></record>
</csv>
Desc,Cantidad,Valor,Fecha,Lugar,UUID
CONSUMO,1.00,156.8966,2014-07-01T08:15:15,39690,8a4f1be7-bdcb-4b22-b144-b3e41dd92e69