zoukankan      html  css  js  c++  java
  • OPENXML with xmlns:dt

    0 vote down star

    Use OPENXML to get dt element in MSSQL 2005. How can I get xmlns:dt element in xml? For example, get a result set of two rows that list product id and country code.

    121403 GBR

    121403 USA

    declare @xmldata xml
       
    set @xmldata =
       
    '<?xml version="1.0"?>
        <data xmlns="http://www.aaa.com/master_browse_response" xmlns:dt="http://www.aaa.com/DataTypes">
          <products>
            <product>
           <product_id><![CDATA[121403]]></product_id>
              <countries>
                <dt:country>GBR</dt:country>
                <dt:country>USA</dt:country>
              </countries>
            </product>
         </products>
        </data>'


         DECLARE
    @hDoc int, @rootxmlns varchar(100)
         SET
    @rootxmlns = '<root xmlns:hm="http://www.aaa.com/master_browse_response"/>'

         EXEC sp_xml_preparedocument
    @hDoc OUTPUT, @xmldata, @rootxmlns  

         SELECT
    *
         FROM OPENXML
    (@hDoc, '//hm:product',2)
         WITH
    ([hm:product_id] int , [hm:countries] varchar(100))

         
    --clean up
         EXEC sp_xml_removedocument
    @hDoc

    Here is one solution that I know by using xmlEdgeTable, but I am looking for a better solution.

    DECLARE @hDoc int, @rootxmlns varchar(100)
    SET
    @rootxmlns = '<root xmlns:hm="http://www.aaa.com/master_browse_response"/>'

    EXEC sp_xml_preparedocument
    @hDoc OUTPUT, @xmldata, @rootxmlns  

    CREATE TABLE
    #xmlEdgeTable
    (
        id
    int,
        parentid
    int,
        localname varchar
    (20),
       
    [text] varchar(20)
    )

    INSERT INTO
    #xmlEdgeTable
    SELECT id
    , parentid,localname, cast([text] as varchar(20))
    FROM OPENXML
    (@hDoc, '//hm:product',2)

    SELECT t6
    .text, t2.text FROM #xmlEdgeTable AS t1 INNER JOIN
       
    #xmlEdgeTable AS t2 ON t1.id = t2.parentid INNER JOIN
       
    #xmlEdgeTable AS t3 ON t3.id = t1.parentid INNER JOIN
       
    #xmlEdgeTable AS t4 ON t4.id = t3.parentid INNER JOIN
       
    #xmlEdgeTable AS t5 ON t4.id = t5.parentid INNER JOIN
       
    #xmlEdgeTable AS t6 ON t5.id = t6.parentid
    WHERE t1
    .localname = 'country' and t5.localname ='product_id'

    --clean up
    EXEC sp_xml_removedocument
    @hDoc
    DROP TABLE
    #xmlEdgeTable
    摘自:http://stackoverflow.com/questions/1440848/openxml-with-xmlnsdt
  • 相关阅读:
    c语言产生随机数的方法
    二叉树递归建立
    二叉树的非递归建立
    建立链表并逆序打印该链表
    C语言中最常用标准库函数
    九个uname命令获取Linux系统详情的实例
    Ubuntu12.04安装Chrome浏览器,并添加到左侧的启动栏
    编程判断大端字节序和小端字节序
    将十进制转换成二进制输出,递归写法
    Lucene介绍及简单入门案例(集成ik分词器)
  • 原文地址:https://www.cnblogs.com/wuming/p/1609140.html
Copyright © 2011-2022 走看看