1. <legend id='7CnjH'><style id='7CnjH'><dir id='7CnjH'><q id='7CnjH'></q></dir></style></legend>

      <small id='7CnjH'></small><noframes id='7CnjH'>

      <i id='7CnjH'><tr id='7CnjH'><dt id='7CnjH'><q id='7CnjH'><span id='7CnjH'><b id='7CnjH'><form id='7CnjH'><ins id='7CnjH'></ins><ul id='7CnjH'></ul><sub id='7CnjH'></sub></form><legend id='7CnjH'></legend><bdo id='7CnjH'><pre id='7CnjH'><center id='7CnjH'></center></pre></bdo></b><th id='7CnjH'></th></span></q></dt></tr></i><div id='7CnjH'><tfoot id='7CnjH'></tfoot><dl id='7CnjH'><fieldset id='7CnjH'></fieldset></dl></div>
    1. <tfoot id='7CnjH'></tfoot>
        <bdo id='7CnjH'></bdo><ul id='7CnjH'></ul>

      XML to SQL - 选择多个同名节点

      时间:2023-06-07

      1. <tfoot id='PI41K'></tfoot>
          <tbody id='PI41K'></tbody>
        <i id='PI41K'><tr id='PI41K'><dt id='PI41K'><q id='PI41K'><span id='PI41K'><b id='PI41K'><form id='PI41K'><ins id='PI41K'></ins><ul id='PI41K'></ul><sub id='PI41K'></sub></form><legend id='PI41K'></legend><bdo id='PI41K'><pre id='PI41K'><center id='PI41K'></center></pre></bdo></b><th id='PI41K'></th></span></q></dt></tr></i><div id='PI41K'><tfoot id='PI41K'></tfoot><dl id='PI41K'><fieldset id='PI41K'></fieldset></dl></div>

            <small id='PI41K'></small><noframes id='PI41K'>

            <legend id='PI41K'><style id='PI41K'><dir id='PI41K'><q id='PI41K'></q></dir></style></legend>

                <bdo id='PI41K'></bdo><ul id='PI41K'></ul>
                本文介绍了XML to SQL - 选择多个同名节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                问题描述

                限时送ChatGPT账号..

                我有可以从 XML 文件中选择几个值的工作代码.问题是我有多个同名的节点.

                I have working code that can select a few values from an XML file. The problem is that I have multiple nodes with the same name.

                这是 XML 的一个片段:

                Here is a snippet of the XML:

                <wd:Report_Data xmlns:wd="urn:com.workday.report/Countries_and_Their_Address_Components_Summary">
                  <wd:Report_Entry>
                    <wd:Country wd:Descriptor="Afghanistan">
                      <wd:ID wd:type="WID">db69b722446c11de98360015c5e6daf6</wd:ID>
                      <wd:ID wd:type="ISO_3166-1_Alpha-2_Code">AF</wd:ID>
                      <wd:ID wd:type="ISO_3166-1_Alpha-3_Code">AFG</wd:ID>
                      <wd:ID wd:type="ISO_3166-1_Numeric-3_Code">4</wd:ID>
                    </wd:Country>
                    <wd:Address_Format_Type wd:Descriptor="Basic">
                      <wd:ID wd:type="WID">4516bf435611423ea4ee72fa842572a0</wd:ID>
                    </wd:Address_Format_Type>
                    <wd:Local>1</wd:Local>
                    <wd:Address_Components>
                      <wd:Address_Component wd:Descriptor="Address Line 1 - Local">
                        <wd:ID wd:type="WID">12d859b8df024175a111da2e088250fb</wd:ID>
                        <wd:ID wd:type="Address_Component_Type_ID">ADDRESS_LINE_1_LOCAL</wd:ID>
                      </wd:Address_Component>
                      <wd:Order>a</wd:Order>
                      <wd:Required>0</wd:Required>
                    </wd:Address_Components>
                    <wd:Address_Components>
                      <wd:Address_Component wd:Descriptor="Address Line 2 - Local">
                        <wd:ID wd:type="WID">85a6ab9412c44dd9a71a7e4760bf17fb</wd:ID>
                        <wd:ID wd:type="Address_Component_Type_ID">ADDRESS_LINE_2_LOCAL</wd:ID>
                      </wd:Address_Component>
                      <wd:Order>b</wd:Order>
                      <wd:Required>0</wd:Required>
                    </wd:Address_Components>
                

                我的 SQL 如下:

                declare @inputxml table (x xml)
                
                insert @inputxml
                select x
                from OPENROWSET(BULK 'C:\ParallelTool\addcomp.xml', SINGLE_BLOB) As T(x)
                
                ;WITH XMLNAMESPACES(DEFAULT 'urn:com.workday.report/Countries_and_Their_Address_Components_Summary')
                    select 
                        xmldata.[ISO], xmldata.[Component 1], xmldata.[Component 2], xmldata.[Required]
                    into dbo.WD
                    from @inputxml
                    cross apply (
                        select 
                            [ISO] = xmldata.value('(Country/ID)[3]', 'VARCHAR(MAX)'),
                            [Component 1] = xmldata.value('(Address_Components/Address_Component/ID)[2]', 'VARCHAR(MAX)'),
                            [Component 2] = xmldata.value('(Address_Components/Address_Component/ID)[2]', 'VARCHAR(MAX)'),
                            [Required] = xmldata.value('(Address_Components/Required)[1]', 'INT')
                        from x.nodes('/Report_Data/Report_Entry') Z1(xmldata)
                    ) xmldata
                

                我无法得到我需要的是 [组件 2].我想基本上选择文件中的所有Address_Component_Type_ID",但它们的名称都相同,并且在名称相同的其他节点下.如何在我的 SQL 中指定获取所有组件类型?感谢您的关注!

                Where I can't get what I need is the [Component 2]. I want to basically select ALL of the "Address_Component_Type_ID" in the file, but they are all named the same and under other nodes that are named the same. How can I specify in my SQL to grab all of the Component Types? Thank you for looking!

                推荐答案

                取决于您想要做什么...如果您知道正好有 2 个Address_Components"要抓取,您可以像这样修改您的查询:

                Depends what you want to do... If you know there are exactly 2 "Address_Components" that you want to grab, you can modify your query like so:

                ;WITH XMLNAMESPACES(DEFAULT 'urn:com.workday.report/Countries_and_Their_Address_Components_Summary')
                    select 
                        xmldata.[ISO], xmldata.[Component 1], xmldata.[Component 2], xmldata.[Required]
                    from @inputxml
                    cross apply (
                        select 
                            [ISO] = xmldata.value('(Country/ID)[3]', 'VARCHAR(MAX)'),
                            [Component 1] = xmldata.value('(Address_Components/Address_Component/ID)[2]', 'VARCHAR(MAX)'),
                            [Component 2] = xmldata.value('(Address_Components[2]/Address_Component/ID)[2]', 'VARCHAR(MAX)'),
                            [Required] = xmldata.value('(Address_Components/Required)[1]', 'INT')
                        from x.nodes('/Report_Data/Report_Entry') Z1(xmldata)
                    ) xmldata
                

                结果如下:

                ISO   Component 1               Component 2               Required
                ----- ------------------------- ------------------------- -----------
                AFG   ADDRESS_LINE_1_LOCAL      ADDRESS_LINE_2_LOCAL      0
                

                但是,如果可以有任意数量的Address_Components",并且您想将它们抓取到单独的记录中,您可以像这样重写您的查询:

                However, if there can be any number of "Address_Components", and you want to grab them into separate records, you can rewrite your query like this:

                ;WITH XMLNAMESPACES(DEFAULT 'urn:com.workday.report/Countries_and_Their_Address_Components_Summary')
                    select 
                        [ISO] = Report_Entry.x.value('(Country/ID)[3]', 'VARCHAR(MAX)')
                        , [Component] = Address_Components.x.value('(Address_Component/ID)[2]', 'VARCHAR(MAX)')
                        , [Required] = Address_Components.x.value('(Required)[1]', 'INT')
                    from @inputxml
                    cross apply x.nodes('/Report_Data/Report_Entry') Report_Entry(x)
                    cross apply Report_Entry.x.nodes('./Address_Components') Address_Components (x)
                

                结果如下:

                ISO   Component                 Required
                ----- ------------------------- -----------
                AFG   ADDRESS_LINE_1_LOCAL      0
                AFG   ADDRESS_LINE_2_LOCAL      0
                

                这篇关于XML to SQL - 选择多个同名节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                上一篇:如何从 XMLType 节点中提取元素路径? 下一篇:xquery 返回元素名称

                相关文章

                最新文章

                <small id='aXCiN'></small><noframes id='aXCiN'>

                  • <bdo id='aXCiN'></bdo><ul id='aXCiN'></ul>
                1. <legend id='aXCiN'><style id='aXCiN'><dir id='aXCiN'><q id='aXCiN'></q></dir></style></legend>

                  1. <tfoot id='aXCiN'></tfoot>
                    <i id='aXCiN'><tr id='aXCiN'><dt id='aXCiN'><q id='aXCiN'><span id='aXCiN'><b id='aXCiN'><form id='aXCiN'><ins id='aXCiN'></ins><ul id='aXCiN'></ul><sub id='aXCiN'></sub></form><legend id='aXCiN'></legend><bdo id='aXCiN'><pre id='aXCiN'><center id='aXCiN'></center></pre></bdo></b><th id='aXCiN'></th></span></q></dt></tr></i><div id='aXCiN'><tfoot id='aXCiN'></tfoot><dl id='aXCiN'><fieldset id='aXCiN'></fieldset></dl></div>