sql server 上的 XML 解析

XML Parsing on sql server(sql server 上的 XML 解析)
本文介绍了sql server 上的 XML 解析的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何以格式返回数据:

Column Name t01     t02     t03     t04
Data        c01     c02     c03     c04

<orders xmlns="www address">
    <order>
        <order-date>2019-09-05</order-date>
        <created-by>storefront</created-by>
        <original-order-no>000001</original-order-no>
        <currency>USD</currency>
        <taxation>gross</taxation>
        <invoice-no>0099999</invoice-no>
        <custom-attributes>
            <custom-attribute attribute-id="t01">c01</custom-attribute>
            <custom-attribute attribute-id="t02">c02</custom-attribute>
            <custom-attribute attribute-id="t03">c03</custom-attribute>
            <custom-attribute attribute-id="t04">c04</custom-attribute>
        </custom-attributes>    
    </order>
</orders>

推荐答案

从你的问题来看,有一点不清楚:输出列的命名.

From your question there's one thing not clear: The naming of the output columns.

在您预期的输出中,它们的名称与它们的 attribute-id 一样.但在您的评论中,听起来像是您选择了前 4 个属性,而您想忽略其余属性.

In your expected output they are named like their attribute-id. But in your comments it sounds, like you are picking the first 4 attributes and you want to omit the rest.

我想展示两种方法,选择你更喜欢的一种:

I want to show two approaches, pick the one you like more:

DECLARE @mockupTable TABLE(ID INT IDENTITY, YourXml XML);
INSERT INTO @mockupTable VALUES
(N'<orders xmlns="www address">
    <order>
        <order-date>2019-09-05</order-date>
        <created-by>storefront</created-by>
        <original-order-no>000001</original-order-no>
        <currency>USD</currency>
        <taxation>gross</taxation>
        <invoice-no>0099999</invoice-no>
        <custom-attributes>
            <custom-attribute attribute-id="t01">c01</custom-attribute>
            <custom-attribute attribute-id="t02">c02</custom-attribute>
            <custom-attribute attribute-id="t03">c03</custom-attribute>
            <custom-attribute attribute-id="t04">c04</custom-attribute>
        </custom-attributes>    
    </order>
</orders>');

--此查询将使用 attribute-id 选择相应的属性.
--我们可以使用相同的名称安全地返回它
--如果你的XML没有对应的属性,就会出现NULL值

--This query will use the attribute-id to pick the corresponding attribute.
--We can savely return this with the same name
--If your XML does not have the corresponding attribute, there will be a NULL value

WITH XMLNAMESPACES(DEFAULT 'www address')
SELECT o.value('(order-date/text())[1]','date') OrderDate
      --As in your other questions
      ,o.value('(custom-attributes/custom-attribute[@attribute-id="t01"]/text())[1]','varchar(100)') AS t01 
      ,o.value('(custom-attributes/custom-attribute[@attribute-id="t02"]/text())[1]','varchar(100)') AS t02
      ,o.value('(custom-attributes/custom-attribute[@attribute-id="t03"]/text())[1]','varchar(100)') AS t03 
      ,o.value('(custom-attributes/custom-attribute[@attribute-id="t04"]/text())[1]','varchar(100)') AS t04 
FROM @mockupTable t
CROSS APPLY t.YourXml.nodes('/orders/order') A(o);

--这个比较容易.它只会选择前四个属性,无论它们有什么 id.

--This one is easier. It will pick just the first four attributes, no matter what id they have.

WITH XMLNAMESPACES(DEFAULT 'www address')
SELECT o.value('(order-date/text())[1]','date') OrderDate
      --As in your other questions
      ,o.value('(custom-attributes/custom-attribute[1]/text())[1]','varchar(100)') AS ca1 
      ,o.value('(custom-attributes/custom-attribute[2]/text())[1]','varchar(100)') AS ca2
      ,o.value('(custom-attributes/custom-attribute[3]/text())[1]','varchar(100)') AS ca3 
      ,o.value('(custom-attributes/custom-attribute[4]/text())[1]','varchar(100)') AS ca4 
FROM @mockupTable t
CROSS APPLY t.YourXml.nodes('/orders/order') A(o);

这篇关于sql server 上的 XML 解析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)