【问题标题】:NameSpaces in xml sqlxml sql 中的命名空间
【发布时间】:2018-05-13 12:20:18
【问题描述】:

如何在查询中声明命名空间?

声明命名空间时出现错误

Declare @Mydoc xml
set @Mydoc = (
         select importe, algo,XD,
               (select impuesto,tasa,transferencia
                from CfdiDet
                for xml raw('cfdi_detalle'),type)
         from cfdienc
         for xml raw('cfdi_encabezado'),type)

这是我有问题的部分

set @Mydoc.modify('declare xmlnamespaces ('uri',cfdi')

我想用":"替换"_"

【问题讨论】:

    标签: sql xml sql-server-2008 xml-namespaces


    【解决方案1】:

    命名空间前缀不仅仅是您可以使用.modify() 操作的字符串的一部分...嗯,您可以将 XML 转换为字符串,执行 REPLACE 并将其转换回来到 XML。但正确的方法是声明命名空间。

    要声明命名空间,您可以使用 WITH XMLNAMESPACES 或使用隐式命名空间声明(在您的情况下不可能)。

    试试这个

    DECLARE @Mydoc XML;
    
    WITH XMLNAMESPACES('uri' AS cfdi)
    SELECT @Mydoc=
    (
    SELECT 'SomeDummy' AS importe
    FOR XML RAW('cfdi:encabezado'),TYPE
    );
    
    SELECT @Mydoc 
    

    结果

    <cfdi:encabezado xmlns:cfdi="uri" importe="SomeDummy" />
    

    【讨论】:

    • 你知道我是如何对我的文件进行 encoding = "uft-8" 的吗?是它只在version =“1.0”中生成,现在......
    • 你是我的英雄!! :D
    • @carlitus212 XML 声明 &lt;?xml ...blah ...?&gt; 并没有真正绑定到 XML。这是告诉消费者有关内容及其编码的详细信息的东西。如果真正的编码是UCS-2,那么将utf-8 之类的内容写入标题绝对没有意义。这个声明不仅仅是一些花哨的魔法......当您将 XML 写入文件时,您应该设置正确的编码并在标题中说明这一点。这本机不支持Read this related question
    • 非常感谢,你帮了我很多:D
    • @carlitus212 只需使用类似REPLACE(CAST(YourXml AS NVARCHAR(MAX)),'cfdi_','cfdi:') 的东西。并使用另一个REPLACE()STUFF() 手动将命名空间声明设置到根节点中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多