【问题标题】:set default xml namespace for openxml为 openxml 设置默认的 xml 命名空间
【发布时间】:2015-11-06 08:25:48
【问题描述】:

这可能是一个简单的问题,抱歉。

我有一个以这些行开头的 XMl 文件:

<?xml version="1.0" encoding="windows-1252"?>
<MyData xmlns="http://xyz.com.au/schema/v1_10/MyData">
  <data>
    <patient>
      <link_id>{764C733A-64DE-4663-82B1-1A23B95FDFE2}</link_id>

我将它加载到这样的表中的 XML 数据类型中:

CREATE TABLE MMD (
Id INT IDENTITY PRIMARY KEY,
XMLData XML,
LoadedDateTime DATETIME)

INSERT INTO MMD (XMLData, LoadedDateTime)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK 'C:\Test.xml', SINGLE_BLOB) AS x;

然后我像这样查询它:

DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)

SELECT @XML = XMLData FROM MMD

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

;with xmlnamespaces (default 'http://xyz.com.au/schema/v1_10/MyData/')
SELECT  distinct(link_id)
FROM OPENXML(@hDoc, 'MyData/data/patient')
WITH 
(link_id [varchar](50) 'link_id') t

EXEC sp_xml_removedocument @hDoc
GO

查询返回 0 行。但是,如果我像这样从文件的第二行中删除命名空间:from:

<MyData xmlns="http://xyz.com.au/schema/v1_10/MyData">

到:

<MyData>

然后我得到了我期望的结果!

我已阅读所有帖子并尝试了各种语法变体,但均未成功。

提前感谢您的帮助。

布赖恩

【问题讨论】:

    标签: xml tsql xml-namespaces


    【解决方案1】:

    我不确定OPENXMLwith xmlnamespaces 是否可以一起工作。如果我完全切换到使用xml data type methods(并将示例扩展为有效的 xml),这一切都很好:

    declare @t table (XMLData xml)
    insert into @t(XmlData) values ('<?xml version="1.0" encoding="windows-1252"?>
    <MyData xmlns="http://xyz.com.au/schema/v1_10/MyData">
      <data>
        <patient>
          <link_id>{764C733A-64DE-4663-82B1-1A23B95FDFE2}</link_id>
        </patient>
      </data>
    </MyData>')
    
    ;with xmlnamespaces (default 'http://xyz.com.au/schema/v1_10/MyData')
    select distinct XmlData.value('(MyData/data/patient/link_id)[1]','varchar(50)')
    from @t
    

    结果:

    --------------------------------------------------
    {764C733A-64DE-4663-82B1-1A23B95FDFE2}
    

    【讨论】:

    • 感谢您的帮助,但我正在为这种语法苦苦挣扎。我的背景不是 MS T-SQL。我可能需要去看看书。
    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多