在 BaseX 中将 xml 从 XQuery 转换为 csv

2024-02-05

我写这篇文章的原因是因为我在 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>

CSV 序列化所需的 XML 描述于CSV模块 http://docs.basex.org/wiki/CSV_Module文档。 BaseX 文档中的示例:

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

换句话说,一个<csv/>元素包装了所有数据,每个记录由<csv/>元素和最后的列存储为具有文本节点子节点的元素。

查看当前的输出(通过删除序列化选项),返回以下内容:

<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>

您在两个方面不符合要求:

  • no <record/>元素
  • 值存储为属性,而不是文本节点

如果您使用如下查询更正这两个问题:

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>

您将获得预期的 CSV 输出:

Desc,Cantidad,Valor,Fecha,Lugar,UUID
CONSUMO,1.00,156.8966,2014-07-01T08:15:15,39690,8a4f1be7-bdcb-4b22-b144-b3e41dd92e69
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 BaseX 中将 xml 从 XQuery 转换为 csv 的相关文章

  • 在工具栏下显示内容

    您好 我试图简单地将我的内容放在工具栏下方 但是当我运行我的应用程序时 某些内容本应位于工具栏下方 却隐藏在工具栏后面 我已经阅读了有关使用框架布局来尝试将其分离的内容 但我有点卡住了 我目前正在使用该软件提供的基本 android stu
  • 使用 C# 编辑 XML 文档

    我在解决如何将元素添加到 XML 文档中时遇到了一些麻烦 我想将热点信息添加到 xml 中 其中 Id 正确 因此 id 2 添加热点信息 这是我当前的 XML
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • 如何使用 Webpack 加载器导入 XML,而不自动转换为 JSON

    Webpack 4 的 xml loader 自动将导入的 XML 文件转换为 JSON 通过什么方式可以导入XMLwithout转换为 JSON XML 数据将使用现有的 应用程序专用的 XML 解析器进行处理 明确地说 我绝对愿意not
  • 使用 Retrofit 2 解析 XML

    我试图从央行获取汇率 不幸的是他们没有可以提供 JSON 数据的 api 仅在 XML 中 我正在使用 Retrogit 2 我已经创建了两个类 它们描述了我从网站获得的 xml 但是当我尝试获取回调的响应时 我收到了 404 错误代码 也
  • 为什么 pandas.to_datetime 对于非标准时间格式(例如“2014/12/31”)很慢

    我有一个这种格式的 csv 文件 timestmp p 2014 12 31 00 31 01 9200 0 7 2014 12 31 00 31 12 1700 1 9 当通过阅读时pd read csv并将时间字符串转换为日期时间使用p
  • jQuery - 提高处理 XML 时的选择器性能

    我正在处理一个 XML 文件 当使用 XPath 样式选择器选择节点时 该文件的性能非常慢 这是运行特别慢的部分代码 for i 0 i
  • VBA XML V6.0 如何让它等待页面加载?

    我一直在努力寻找答案 但似乎找不到任何有用的东西 基本上 我是从一个网站上拉取的 当您在该页面上时 该网站会加载更多项目 我希望我的代码在加载完成后提取最终数据 但不知道如何让 XML httprequest 等待 Edited Sub p
  • 为什么 XPath 不能与 xmlns 属性一起使用

    我有以下 XPath 表达式 configuration properties 这是我的 XML
  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • JavaFX 中的 fx:id 和 id: 有什么区别?

    也许是一个真正的新手的问题 我开始通过阅读以下教程在 FMXL 应用程序中使用场景生成器学习 JavaFX http docs oracle com javase 8 javafx get started tutorial fxml tut
  • 根据属性值使用 xslt 合并两个元素

    这是我的源文件的样子
  • XML 创建 - 错误:带有替代方案的重载方法构造函数 UnprefixedAttribute

    scala gt val count 7 count Int 7 将其放入 XML 属性中会出现错误 scala gt val x
  • 检查 XML 元素是否存在

    如何验证 XML 文件中是否存在特定元素 假设我有一个不断变化的 XML 文件 我需要在读取 解析它之前验证每个元素是否存在 if doc SelectSingleNode mynode null 应该这样做 显然 其中 doc 是您的 X
  • JSPX 命名空间对于 EL 函数不可见?

    我正在尝试使用 JSPX JSP 的纯 XML 语法 并遇到看起来应该可以工作但实际上却不起作用的情况 我使用 jsp root 元素中的命名空间声明导入标签库 然后稍后将这些用于元素以及 EL 函数
  • 在 Java 中创建 XML 文件的最佳方法是什么?

    我们目前使用 dom4j 来创建 XML 文件 不过 我猜现在有更好的东西了 如果我们使用的是 Java 1 6 或更高版本 那么在编写 XML 文件时最好使用什么类 运行速度最快 使用简单 我不需要构建一个 DOM 然后编写整个 DOM
  • 在 PHP 中将 CSV 写入不带括号的文件

    是否有本机函数或实体类 库用于将数组写入 CSV 文件中的一行而无需封装 fputcsv将默认为 如果没有为封装参数传入任何内容 谷歌让我失望了 返回一大堆有关的页面的结果 fputcsv PEAR 的库做的事情或多或少与fputcsv 工
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • CakePHP Xml 实用程序库触发 DOMDocument 警告

    我正在使用 CakePHP 在视图中生成 XMLXML核心库 http book cakephp org 2 0 en core utility libraries xml html xml Xml build data array ret
  • 删除Android所有语言中的字符串

    我有一个包含多个翻译的应用程序 我想删除一些字符串 我怎样才能重构并删除它们一次 例如在默认情况下strings xml文件并自动将删除传播到其他翻译的其他 strings xml 文件 您可以通过 Android Studio 中的 翻译

随机推荐