簡體   English   中英

解析xml文件並使用存儲過程獲取節點的父名稱

[英]Parsing xml file and getting parent names of nodes using stored procedure

我有一個xml文件,它是SQL Server中存儲過程的輸入。 我有一個表,其中包含列element nameparent id 根元素父ID為0,第一個元素父ID為1,依此類推。 我該如何實現?

我的xml中有幾種復雜的類型

<VoyageOrderMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="voyage.xsd">
    <MessageHeader>
            <MessageId>ID</MessageId>
            <MessageDate>2009-11-01T11:42:07.414+03:00</MessageDate>
            <MessageTypeVersion>Version</MessageTypeVersion>
            <SenderId>SI</SenderId>
            <ReceiverDetails>
                <ReceiverMethod />
                <ReceiverFormat />
                <ReceiverAddress></ReceiverAddress>
                </ReceiverDetails>
    </MessageHeader>
    <VoyageOrder>
            <VoyageID>RG-FUW-001</VoyageID>
            <Amendment>4</Amendment>
            <IMO>9256200</IMO>
            <VesselName>Fuwairit</VesselName>
            <ShipMasterName />
            <OrderDate>2009-11-01T11:41:59.149+03:00</OrderDate>
            <Passage>
                <PassageNumber>1</PassageNumber>
                <PassageType>Laden</PassageType>
                <DeparturePortName>Ras Laffan</DeparturePortName>
                <DeparturePortCode>RLF</DeparturePortCode>
                <DepartureTime>2009-10-06T19:06:00.000+03:00</DepartureTime>
                <ArrivalPortName>Suez</ArrivalPortName>
                <ArrivalPortCode>SUZ</ArrivalPortCode>
                <ArrivalTime>2009-10-13T03:00:00.000+02:00</ArrivalTime>
            </Passage>

輸出示例

elementname parent id column
------------------------------
voyageorder   0             1
messageheader 1           2
messageid     2           3
etc

任何幫助表示贊賞

在回答問題時作者首先發表評論

CREATE TABLE Blah
(SomeData XML)

INSERT Blah
SELECT MyXMLinfo

看起來您可以使用OPENXML返回的邊緣表格式。

SQL小提琴

MS SQL Server 2012架構設置

查詢1

declare @xml xml = '
<VoyageOrderMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="voyage.xsd">
    <MessageHeader>
            <MessageId>ID</MessageId>
            <MessageDate>2009-11-01T11:42:07.414+03:00</MessageDate>
    </MessageHeader>
    <VoyageOrder>
            <VoyageID>RG-FUW-001</VoyageID>
            <Amendment>4</Amendment>
            <OrderDate>2009-11-01T11:41:59.149+03:00</OrderDate>
            <Passage>
                <PassageNumber>1</PassageNumber>
                <PassageType>Laden</PassageType>
            </Passage>
    </VoyageOrder>
</VoyageOrderMessage>'

declare @idoc int

exec sp_xml_preparedocument @idoc output, @xml

select *
from openxml(@idoc, '*')

exec sp_xml_removedocument @idoc

結果

| ID | PARENTID | NODETYPE |                 LOCALNAME | PREFIX |                              NAMESPACEURI | DATATYPE |   PREV |                                      TEXT |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|  0 |   (null) |        1 |        VoyageOrderMessage | (null) |                                    (null) |   (null) | (null) |                                    (null) |
|  2 |        0 |        2 |                       xsi |  xmlns |                                    (null) |   (null) | (null) |                                    (null) |
| 14 |        2 |        3 |                     #text | (null) |                                    (null) |   (null) | (null) | http://www.w3.org/2001/XMLSchema-instance |
|  3 |        0 |        2 | noNamespaceSchemaLocation |    xsi | http://www.w3.org/2001/XMLSchema-instance |   (null) | (null) |                                    (null) |
| 15 |        3 |        3 |                     #text | (null) |                                    (null) |   (null) | (null) |                                voyage.xsd |
|  4 |        0 |        1 |             MessageHeader | (null) |                                    (null) |   (null) | (null) |                                    (null) |
|  5 |        4 |        1 |                 MessageId | (null) |                                    (null) |   (null) | (null) |                                    (null) |
| 16 |        5 |        3 |                     #text | (null) |                                    (null) |   (null) | (null) |                                        ID |
|  6 |        4 |        1 |               MessageDate | (null) |                                    (null) |   (null) |      5 |                                    (null) |
| 17 |        6 |        3 |                     #text | (null) |                                    (null) |   (null) | (null) |             2009-11-01T11:42:07.414+03:00 |
|  7 |        0 |        1 |               VoyageOrder | (null) |                                    (null) |   (null) |      4 |                                    (null) |
|  8 |        7 |        1 |                  VoyageID | (null) |                                    (null) |   (null) | (null) |                                    (null) |
| 18 |        8 |        3 |                     #text | (null) |                                    (null) |   (null) | (null) |                                RG-FUW-001 |
|  9 |        7 |        1 |                 Amendment | (null) |                                    (null) |   (null) |      8 |                                    (null) |
| 19 |        9 |        3 |                     #text | (null) |                                    (null) |   (null) | (null) |                                         4 |
| 10 |        7 |        1 |                 OrderDate | (null) |                                    (null) |   (null) |      9 |                                    (null) |
| 20 |       10 |        3 |                     #text | (null) |                                    (null) |   (null) | (null) |             2009-11-01T11:41:59.149+03:00 |
| 11 |        7 |        1 |                   Passage | (null) |                                    (null) |   (null) |     10 |                                    (null) |
| 12 |       11 |        1 |             PassageNumber | (null) |                                    (null) |   (null) | (null) |                                    (null) |
| 21 |       12 |        3 |                     #text | (null) |                                    (null) |   (null) | (null) |                                         1 |
| 13 |       11 |        1 |               PassageType | (null) |                                    (null) |   (null) |     12 |                                    (null) |
| 22 |       13 |        3 |                     #text | (null) |                                    (null) |   (null) | (null) |                                     Laden |

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM