【发布时间】:2011-03-29 02:53:21
【问题描述】:
使用 T-SQL 查询数据时,如何删除/忽略 xml 文件中的 XML 命名空间?
我正在将一个 xml 文件加载到一个变量中,它工作得很好。但是 xml 有一个命名空间集,除非我删除它,否则我的查询是空的。
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
但 XML 还包含一个默认命名空间:
<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 并不是一个真正的选择。
问题:
- 当我将数据加载到变量中时,如何删除或忽略命名空间?
- 或者如何修改我的查询来处理命名空间?
【问题讨论】:
标签: sql-server-2005 tsql xml-namespaces