我有以下问题,我需要删除“ 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是定义前缀名称空间的其他元素的一部分。因此,我想所有的工作都如您所定义。
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位于同一个名称空间中- 没有单独的名称空间声明。
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前缀名称空间声明。
cfdi:traslados
cfdi:gatito
我对sql-server XML不熟悉,但是如果您ROOT('cfdi:traslados')从子选择中删除会发生什么 呢?它会xmlns:cfdi="uri"从<cfdi:traslados xmlns:cfdi="uri">元素中删除吗?
xmlns:cfdi="uri"
<cfdi:traslados xmlns:cfdi="uri">