忽略 T-SQL 中的 XML 命名空间 [英] Ignore XML namespace in T-SQL

查看:36
本文介绍了忽略 T-SQL 中的 XML 命名空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在使用 T-SQL 查询数据时删除/忽略 xml 文件中的 XML 命名空间?

How do I remove/ignore the XML namespace in an xml file when querying the data with T-SQL?

我正在将一个 xml 文件加载到一个变量中,它工作得很好.但是 xml 有一个命名空间集,除非我删除它,否则我的查询会变成空的.

I’m loading an xml file into a variable, and it works just fine. But the xml has a namespace set, and unless I remove it, my queries come up empty.

T-SQL:

DECLARE @xml xml
SELECT @xml = BulkColumn FROM OPENROWSET(BULK 'C:\myfile.xml', SINGLE_BLOB) AS A

SELECT X.z.value('ID[1]', 'VARCHAR(3)') FROM @xml.nodes('myroot/element') AS X(z)

XML 示例:

<?xml version="1.0" encoding="utf-8"?>
<myroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <element>
    <ID>1</ID>
  </element>
  <element>
    <ID>2</ID>
  </element>
  <element>
    <ID>3</ID>
  </element>
</myroot>

这有效,查询返回:

1
2
3

1
2
3

但是 XML 也包含一个默认的命名空间:

But the XML also contains a default namespace:

<myroot xmlns="http://XXX" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

xmlns="http://XXX" 完全搞砸了我的查询.不幸的是,在加载之前手动修改 xml 并不是一个真正的选择.

The xmlns="http://XXX" completely screws up my query. And unfortunately manually modifying the xml before loading it is not really an option.

问题:

  • 在将数据加载到变量中时,如何删除或忽略命名空间?
  • 或者如何修改我的查询以处理命名空间?

推荐答案

就用这个:

;WITH XMLNAMESPACES(DEFAULT 'http://XXX')
SELECT 
    X.z.value('ID[1]', 'VARCHAR(3)') 
FROM 
    @xml.nodes('/myroot/element') AS X(z)

WITH XMLNAMESPACES 允许你为你的查询定义命名空间别名,如果你不关心特定的 XML 命名空间前缀,你可以将它定义为 DEFAULT 命名空间并完成它.

The WITH XMLNAMESPACES allows you to define namespace aliasses for your queries, and if you don't care about a specific XML namespace prefix, you can just define it as DEFAULT namespace and be done with it.

这篇关于忽略 T-SQL 中的 XML 命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆