sql解析不同命名节点的xml

①使用sp_xml_preparedocument解析有固定路径与字段名(相同命名节点)的XML:

    --要解析的内容为@DataXML
   DECLARE @DataXml XML
   set @DataXml=N'<Root><Feeder item="0302C2RQ" GCname="测试111"  ></Feeder><Feeder item="0302C2RQ" GCname="测试222"  ></Feeder></Root>'
   
    
    --使用sp_xml_preparedocument读取XML
    DECLARE @xdoc INT;
    EXEC sp_xml_preparedocument @xdoc OUTPUT, @DataXml;

    --使用OPENXML获取XML数据
	SELECT a.*
    FROM
           OPENXML(@xdoc, '/Root/Feeder', 1)
           WITH ( item varchar(500),
		          GCname varchar(max)
				 ) AS a;

本例结果为:
在这里插入图片描述
OPENXML有三个参数:
第一个是sp_xml_preparedocument读取的OUTPUT参数,在本例中为@xdoc
第二个是一个XPath表达式,用来获取指定位置的数据
第三个是一个可选项,用来表示获取的方式,有0,1,2,8四种取值:
在这里插入图片描述
FROM后面的WITH也是可选的,用来指定获取哪些数据字段。
②使用nodes获取相同命名节点的XML

declare @p1 xml
    set @p1=convert(xml,N'<en><column0>370705</column0>
    <column1>GRN200物料编码</column1><column2>RK20-202入库单</column2>
	<column3>ML20-2020领料单</column3><column4>IQC20081检验单</column4>
	<column5>K-YS-料号</column5><column6>SMD陶瓷电容</column6></en>')
	
	SELECT
       C.value('local-name(.)','nVARCHAR(max)') AS ElementName,
        C.value('.','nVARCHAR(max)') AS ElementValue
    FROM @p1.nodes('/*/*') T(C)

本例结果为:
在这里插入图片描述
若取两个节点下的nodes多加一个’/*’,如:

declare @p1 xml
set @p1=convert(xml,N'<table><en><column0>370705</column0><column1>GRN200物料编码</column1><column2>RK20-202入库单</column2>
<column3>ML20-2020领料单</column3><column4>IQC20081检验单</column4>
<column5>K-YS-料号</column5><column6>SMD陶瓷电容</column6></en></table>')

SELECT
   C.value('local-name(.)','nVARCHAR(max)') AS ElementName,
    C.value('.','nVARCHAR(max)') AS ElementValue
FROM @p1.nodes('/*/*/*') T(C)

本例结果为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值