使用FOR XML EXPLICIT时删除xmlns =“”名称空间声明

格里格里姆

我正在使用生成XML文档FOR XML EXPLICIT

declare @MyTable table (value xml);

insert into @MyTable values
 ('<foo bar="data1">content1</foo>')
,('<foo bar="data2">content2</foo>')
,('<foo bar="data3">content3</foo>');

select 1 as Tag, null as Parent
    , value as [x!1!!xml]
from @MyTable
for xml explicit;

并得到这样的回应:

<x>
  <foo bar="data1" xmlns="">content1</foo>
</x>
<x>
  <foo bar="data2" xmlns="">content2</foo>
</x>
<x>
  <foo bar="data3" xmlns="">content3</foo>
</x>

问题是我不需要该xmlns属性。

我找到了解决方案,但这似乎是对立。

select 1 as Tag, null as Parent
    , cast (value as varchar(200)) as [x!1!!xml]
from @MyTable
for xml explicit;

有没有更优雅的方法来解决问题?

不提供使用FOR XML PATH/RAW/AUTO

EXPLICIT 模式是必须的。

所罗门·鲁兹基

如果根元素名称(即foo,Question中的示例数据)在所有行中都相同,则有一种简单的方法可以完成此操作:

  1. 在列名称中指定AttributeName项(第3项)。就示例数据而言,将为foo

  2. 使用xmltext 指令(第4项)代替xml

列名称为:

[x!1!foo!xmltext]

完整的查询将是:

SELECT 1 AS [Tag], NULL AS [Parent]
    , value AS [x!1!foo!xmltext]
FROM @MyTable
FOR XML EXPLICIT;

但是,如果根元素名称确实有所不同,则上述方法不是一种选择,并且看来唯一的方法是将XML数据转换为NVARCHAR(比VARCHAR以来更好的选择,XML而且NVARCHAR都是UTF-16):

SELECT 1 AS [Tag], NULL AS [Parent]
    , CONVERT(NVARCHAR(MAX), value) AS [x!1!!xml]
FROM @MyTable
FOR XML EXPLICIT;

有关更多信息,请参见MSDN页面上的FOR EXPLICIT Mode和FOR XML一起使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用声明的名称空间创建XML?

来自分类Dev

声明名称空间时使用“使用名称空间”

来自分类Dev

WPF声明使用声明的xmlns嵌套名称空间

来自分类Dev

警告:此页面需要使用前缀XXX声明的XML名称空间http://xmlns.jcp.org/jsf/XXX,但该名称空间不存在标记库

来自分类Dev

如何用内联xmlns声明替换XML名称空间前缀?

来自分类Dev

使用XSLT复制时删除XML名称空间

来自分类Dev

使用XML名称空间时简化语法

来自分类Dev

使用JaxWS时将名称空间声明移至根元素

来自分类Dev

声明MathML的XML名称空间

来自分类Dev

“此页面要求使用前缀p声明的XML名称空间,但该名称空间不存在标记库。”

来自分类Dev

未前缀子元素的XML名称空间,其中父元素已声明xmlns:prefix

来自分类Dev

使用ElementTree解析XML时使用名称空间

来自分类Dev

使用XSD验证XML文件时如何使用名称空间

来自分类Dev

如何使用Delphi 7从XML删除名称空间

来自分类Dev

使用注释从XML删除名称空间-Python

来自分类Dev

如何使用Xstream从xml删除名称空间前缀?

来自分类Dev

使用XPath选择XML节点时如何忽略名称空间

来自分类Dev

使用XML文档时指定名称空间

来自分类Dev

使用XML文档时指定名称空间

来自分类Dev

如何使用“纯DOM”在根标记处设置名称空间(xmlns)声明?

来自分类Dev

使用名称空间解析XML

来自分类Dev

使用XSLT从XML删除xmlns

来自分类Dev

默认声明哪些XML名称空间?

来自分类Dev

读取XML和未声明的名称空间

来自分类Dev

从WebApi删除XML名称空间

来自分类Dev

使用名称空间,http://xmlns.jcp.org/xml/ns/persistence/会导致错误

来自分类Dev

Perl 5:在声明的包中使用SWIG生成的模块时,名称空间出现问题

来自分类Dev

Perl 5:在声明的包中使用SWIG生成的模块时,名称空间出现问题

来自分类Dev

PHP名称空间-为什么在声明Parent \ Child时必须“使用{Parent}”?

Related 相关文章

  1. 1

    如何使用声明的名称空间创建XML?

  2. 2

    声明名称空间时使用“使用名称空间”

  3. 3

    WPF声明使用声明的xmlns嵌套名称空间

  4. 4

    警告:此页面需要使用前缀XXX声明的XML名称空间http://xmlns.jcp.org/jsf/XXX,但该名称空间不存在标记库

  5. 5

    如何用内联xmlns声明替换XML名称空间前缀?

  6. 6

    使用XSLT复制时删除XML名称空间

  7. 7

    使用XML名称空间时简化语法

  8. 8

    使用JaxWS时将名称空间声明移至根元素

  9. 9

    声明MathML的XML名称空间

  10. 10

    “此页面要求使用前缀p声明的XML名称空间,但该名称空间不存在标记库。”

  11. 11

    未前缀子元素的XML名称空间,其中父元素已声明xmlns:prefix

  12. 12

    使用ElementTree解析XML时使用名称空间

  13. 13

    使用XSD验证XML文件时如何使用名称空间

  14. 14

    如何使用Delphi 7从XML删除名称空间

  15. 15

    使用注释从XML删除名称空间-Python

  16. 16

    如何使用Xstream从xml删除名称空间前缀?

  17. 17

    使用XPath选择XML节点时如何忽略名称空间

  18. 18

    使用XML文档时指定名称空间

  19. 19

    使用XML文档时指定名称空间

  20. 20

    如何使用“纯DOM”在根标记处设置名称空间(xmlns)声明?

  21. 21

    使用名称空间解析XML

  22. 22

    使用XSLT从XML删除xmlns

  23. 23

    默认声明哪些XML名称空间?

  24. 24

    读取XML和未声明的名称空间

  25. 25

    从WebApi删除XML名称空间

  26. 26

    使用名称空间,http://xmlns.jcp.org/xml/ns/persistence/会导致错误

  27. 27

    Perl 5:在声明的包中使用SWIG生成的模块时,名称空间出现问题

  28. 28

    Perl 5:在声明的包中使用SWIG生成的模块时,名称空间出现问题

  29. 29

    PHP名称空间-为什么在声明Parent \ Child时必须“使用{Parent}”?

热门标签

归档