当前位置: 首页 > 面试题库 >

在SQL中复制XML名称空间

干稳
2023-03-14
问题内容

我有以下问题,我需要删除“ cfdi”的“ cfdi_”:

我使用了命名空间来解决这个问题,但是每个节点都重复了这些命名空间,因此无法消除它们,如果您能帮助我,我将不胜感激

declare @Mydoc xml;

set @Mydoc = (SELECT 
                  '' as importe,
                  (SELECT Importe, TasaCuota, TipoFactor, Impuesto, Base
                   FROM CDFIDet
                   FOR XML RAW('cfdi_traslado'), TYPE, ROOT('cfdi_traslados'))
              FROM
                  CFDIENC
              FOR XML RAW('cfdi_gatito'),type)

SELECT @Mydoc;

结果1:

<cfdi:gatito importe="">
  <cfdi:traslados>
    <cfdi:traslado Importe="1920" TasaCuota="0" TipoFactor="Tasa" Impuesto="16" Base="240" />
    <cfdi:traslado Importe="2202" TasaCuota="0" TipoFactor="TASA" Impuesto="16" Base="450" />
  </cfdi:traslados>
</cfdi:gatito>

第二次尝试:

declare @Mydoc xml;

WITH xmlnamespaces ('uri' as cfdi)
    SELECT @Mydoc = (SELECT 
                         '' AS importe,
                         (SELECT Importe, TasaCuota, TipoFactor, Impuesto, Base
                          FROM CDFIDet
                          FOR XML RAW('cfdi:traslado'), TYPE, ROOT('cfdi:traslados'))
                     FROM CFDIENC
                     FOR XML RAW('cfdi:gatito'), TYPE)

SELECT @Mydoc;

结果:

<cfdi:gatito xmlns:cfdi="uri" importe="">
  <cfdi:traslados xmlns:cfdi="uri">
    <cfdi:traslado Importe="1920" TasaCuota="0" TipoFactor="Tasa" Impuesto="16" Base="240" />
    <cfdi:traslado Importe="2202" TasaCuota="0" TipoFactor="TASA" Impuesto="16" Base="450" />
  </cfdi:traslados>
</cfdi:gatito>

我的代码更大,并且重复了太多次,我不知道如何消除它们


问题答案:

从XML来看,第二个结果是自给自足的XML元素,而第一个结果只能cfdi是定义前缀名称空间的其他元素的一部分。因此,我想所有的工作都如您所定义。

子选择

(SELECT Importe, TasaCuota, TipoFactor, Impuesto, Base
                      FROM CDFIDet
                      FOR XML RAW('cfdi:traslado'), TYPE, ROOT('cfdi:traslados'))

产生自给自足的结果

<cfdi:traslados xmlns:cfdi="uri">
   <cfdi:traslado Importe="1920" TasaCuota="0" TipoFactor="Tasa" Impuesto="16" Base="240" />
   <cfdi:traslado Importe="2202" TasaCuota="0" TipoFactor="TASA" Impuesto="16" Base="450" />
</cfdi:traslados>

因为您定义了ROOT('cfdi:traslados')-您具有名称空间,并且嵌套元素cfdi:traslado位于同一个名称空间中-
没有单独的名称空间声明。

然后顶部选择:

 SELECT 
   '' AS importe,
   (SELECT Importe, TasaCuota, TipoFactor, Impuesto, Base
      FROM CDFIDet
           FOR XML RAW('cfdi:traslado'), TYPE, ROOT('cfdi:traslados'))
 FROM CFDIENC
   FOR XML RAW('cfdi:gatito'), TYPE)

为其定义根元素,cfdi:traslados因为cfdi:gatito它具有自己的cfdi前缀名称空间声明。

我对html" target="_blank">sql-server XML不熟悉,但是如果您ROOT('cfdi:traslados')从子选择中删除会发生什么
呢?它会xmlns:cfdi="uri"<cfdi:traslados xmlns:cfdi="uri">元素中删除吗?



 类似资料:
  • 问题内容: 我正在尝试分析Go中的XML: 输出: 虽然我期望它会产生: 如何获得第一个标签的内容(即没有名称空间的标签)? 问题答案: 我不认为xml解码器可以指定一个元素不应该带有struct标签的名称空间。但是我确实知道它可以为您检索有关名称空间的信息,然后可以对数据进行后期处理以得到相同的结果: http://play.golang.org/p/aDEFPmHPc0

  • 我只是用MVVM轻型工具包编写一些培训窗口项目。当MVVM Light引用添加到项目中时,下面的资源被自动添加到app.xml中 不幸的是,它不起作用,即由于以下错误,无法构建/编译项目: 我找到了几种针对此问题的常见解决方案(例如:更改解决方案平台、清理、重建、重新启动Visual Studio等),但它们并没有改变什么。创建一个新项目也没有帮助。 有没有其他办法让它起作用?我使用Visual

  • 本文向大家介绍xpath 示例XML(无名称空间),包括了xpath 示例XML(无名称空间)的使用技巧和注意事项,需要的朋友参考一下 示例 这是一些示例XML,可以针对这些XML编写示例XPath:            

  • 我是XML新手。这是一个家庭作业。我已经尽了最大努力,但我无法让实例文档进行验证。我总是犯错误 “找不到元素'站点'的声明。 我想我可能错误地声明了一些名称空间或者schemaLocations。有人能给我指一下正确的方向吗? 作业步骤: > <块引用> 在sites.xml文件中,向根站点元素添加命名空间声明,将xs前缀与XML Schema命名空间的URI相关联。为文件指定默认命名空间http

  • 我正在尝试从XMLSpringAMQP配置迁移到基于java注释的配置,因为它“更简单”。不确定我做错了什么XML配置工作正常,但java@Configurable抛出了一个“由:java.net.SocketException:Connection reset引起的”异常。 XML配置(完美工作): Java配置: java配置错误: 我进入了Spring amqp代码,罪魁祸首是RabbitA

  • 使用xslt 1.0(BizTalk 2016)我正在寻找一种通用的方法来选择任何有效的xml文档的命名空间 例如,我有以下xml文档: 假设根元素的值可以是任何东西,那么选择名称空间值的xpath是什么http://www.random.com/bo/request/portfolioactivation 我原本希望“/*/@xmlns”能起作用,但事实并非如此。