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

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

      <tfoot id='SsGTQ'></tfoot>

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

      1. 使用 Xquery 检索 xml 属性

        时间:2023-06-06
        <legend id='sEwiF'><style id='sEwiF'><dir id='sEwiF'><q id='sEwiF'></q></dir></style></legend>
            <tbody id='sEwiF'></tbody>
          1. <tfoot id='sEwiF'></tfoot>
            <i id='sEwiF'><tr id='sEwiF'><dt id='sEwiF'><q id='sEwiF'><span id='sEwiF'><b id='sEwiF'><form id='sEwiF'><ins id='sEwiF'></ins><ul id='sEwiF'></ul><sub id='sEwiF'></sub></form><legend id='sEwiF'></legend><bdo id='sEwiF'><pre id='sEwiF'><center id='sEwiF'></center></pre></bdo></b><th id='sEwiF'></th></span></q></dt></tr></i><div id='sEwiF'><tfoot id='sEwiF'></tfoot><dl id='sEwiF'><fieldset id='sEwiF'></fieldset></dl></div>

                <bdo id='sEwiF'></bdo><ul id='sEwiF'></ul>

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

                  本文介绍了使用 Xquery 检索 xml 属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  限时送ChatGPT账号..

                  我使用以下查询从 XML 文件的属性 ad 元素中选择 XML 的值,但我无法从 XML 页面读取 seq、id、reported dated 属性所以任何人请建议如何使用此查询获取属性值.

                  I am using the below query to select the values of XML from attributes ad elements of the XML file but I am not able to read the seq, id, reported dated attributes from XML page so any one please suggest How to get values of attributes using this Query.

                  select a_node.value('(./text())[1]', 'var char(50)') AS c_val,
                  c1_node.value('(./text())[1]', 'var char(50)') AS c_val 2,
                  ca_node.value('(./text())[1]', 'var char(50)') AS c_val3, 
                  d_node.value('(./text())[1]', 'var char(50)') ,
                  e_node.value('(./text())[1]', 'varchar(50)') ,
                  f_node.value('(./text())[1]', 'var char(50)') 
                  FROM @xmlData.nodes('/Reports/x:InquiryResponse/x:ReportData/x:AccountDetails/x:Account') AS b(b_node) 
                  outer APPLY b.b_node.nodes('./x:primarykey') AS pK_InquiryResponse (a_node) 
                  outer APPLY b.b_node.nodes('./x:seq') AS CustomerCode (c1_node) 
                  outer APPLY b.b_node.nodes('./x:id') AS amount (ca_node)
                  outer APPLY b.b_node.nodes('./x:ReportedDate') AS CustRefField (d_node)
                  outer APPLY b.b_node.nodes('./x:AccountNumber') AS ReportOrderNO (e_node)
                  outer apply b.b_node.nodes('./x:CurrentBalance') as additional_id (f_node);
                  

                  编辑:评论中提供的 Xml 片段

                  Edit: Xml Snippets Provided in Comments

                  <sch:Account seq="2" id="345778174" ReportedDate="2014-01-01">
                      <sch:AccountNumber>TSTC1595</sch:AccountNumber>
                      <sch:CurrentBalance>0</sch:CurrentBalance>
                      <sch:Institution>Muthoot Fincorp Limited</sch:Institution>
                      <sch:PastDueAmount>0</sch:PastDueAmount>
                      <sch:DisbursedAmount>12000</sch:DisbursedAmount>
                      <sch:LoanCategory>JOG Group</sch:LoanCategory>
                  </sch:Account>
                  
                  <sch:Account seq="2" id="345778174" ReportedDate="2014-01-01">
                      <sch:BranchIDMFI>THRISSUR ROAD</sch:BranchIDMFI>
                      <sch:KendraIDMFI>COSTCO/RECENT-107</sch:KendraIDMFI>
                  </sch:Account>
                  

                  推荐答案

                  使用 Xml Loose @Variable 解析 XQuery

                  假设有一个与此类似的 Xml 文档(即具有一个元素上的所有属性):

                  Assuming an Xml document similar to this (viz with all the attributes on one element):

                  DECLARE @xmlData XML = 
                  N'<Reports xmlns:x="http://foo">
                      <x:InquiryResponse>
                          <x:ReportData>
                              <x:AccountDetails>
                                  <x:Account x:primarykey="pk" x:seq="sq" x:id="id"
                                               x:ReportedDate="2014-01-01T00:00:00" />
                              </x:AccountDetails>
                          </x:ReportData>
                      </x:InquiryResponse>
                  </Reports>';
                  

                  您可以按如下方式抓取属性:

                  You can scrape the attributes out as follows:

                  WITH XMLNAMESPACES('http://foo' AS x)
                  select 
                      Nodes.node.value('(@x:primarykey)[1]', 'varchar(50)') AS c_val,
                      Nodes.node.value('(@x:seq)[1]', 'varchar(50)') AS c_val2,
                      Nodes.node.value('(@x:id)[1]', 'varchar(50)') AS c_val3, 
                      Nodes.node.value('(@x:ReportedDate)[1]', 'DATETIME') as someDateTime
                  FROM 
                     @xmlData.nodes('/Reports/x:InquiryResponse/x:ReportData/x:AccountDetails/x:Account') 
                     AS Nodes(node);
                  

                  • 属性不需要 text() 因为它们自动是字符串
                  • 在命名空间中具有属性是相当不寻常的 - 如果没有,请删除 xmlns 别名前缀.
                    • Attributes don't need text() as they are automatically strings
                    • It is fairly unusual to have attributes in a namespace - drop the xmlns alias prefix if they aren't.
                    • 此处为 SqlFiddle

                      编辑 - 解析 Xml 列

                      • 从属性中删除的命名空间- 假设你有一个表中的数据,而不是一个变量,因此 APPLY 要求.请注意, OUTER APPLY 将返回空值,例如仅当您有行时有用空 Xml 或缺少 Xml 元素.CROSS APPLY 是常态(即将 xpath 应用于 LHS 表上选定的每一行)
                      • 元素的访问方式类似于属性,只是没有@
                      • Namespace dropped from the attributes -Assumed that you have the data in a table, not a variable, hence the APPLY requirement. Note that OUTER APPLY will return nulls, e.g. useful only if you have rows with empty Xml or missing Xml Elements. CROSS APPLY is the norm (viz applying the xpath to each row selected on the LHS table)
                      • Elements are accessed similar to attributes, just without @


                      WITH XMLNAMESPACES('http://foo' AS x)
                      select 
                          Nodes.node.value('(@seq)[1]', 'varchar(50)') AS c_val2,
                          Nodes.node.value('(@id)[1]', 'varchar(50)') AS c_val3, 
                          Nodes.node.value('(@ReportedDate)[1]', 'DATETIME') as someDateTime,
                          Nodes.node.value('(x:AccountNumber)[1]', 'VARCHAR(50)') as accountNumber
                      FROM 
                          MyXmlData z
                          CROSS APPLY
                      z.XmlColumn.nodes('/Reports/x:InquiryResponse/x:ReportData/x:AccountDetails/x:Account') 
                            AS Nodes(node);
                      

                      更新小提琴

                      从磁盘编辑 Xml 文件

                      这是从磁盘读取的 xml 文件的相同内容.请注意,一旦您在 XML 变量 (@MyXmlData) 中拥有数据,您就不需要 CROSS APPLY 到任何东西 - 只需提供xpath 选择合适的节点,然后刮取元素和属性.

                      Here's the same thing for an xml file read from disk. Note that once you have the data in an XML variable (@MyXmlData) that you don't need to CROSS APPLY to anything - just supply xpath to select the appropriate node, and then scrape out the elements and attributes.

                      DECLARE @MyXmlData XML;
                      SET @MyXmlData = 
                      ( SELECT * FROM OPENROWSET ( BULK N'c:\temp\file3098.xml', SINGLE_CLOB ) AS MyXmlData );
                      -- Assuming all on the one element, no need for all the applies
                      -- attributes don't have a text axis (they are automatically strings
                      
                      WITH XMLNAMESPACES('http://foo' AS x)
                      select 
                          Nodes.node.value('(@seq)[1]', 'varchar(50)') AS c_val2,
                          Nodes.node.value('(@id)[1]', 'varchar(50)') AS c_val3, 
                          Nodes.node.value('(@ReportedDate)[1]', 'DATETIME') as someDateTime,
                          Nodes.node.value('(x:AccountNumber)[1]', 'VARCHAR(50)') as accountNumber
                      FROM 
                            @MyXmlData.nodes('/Reports/x:InquiryResponse/x:ReportData/x:AccountDetails/x:Account') 
                            AS Nodes(node);
                      

                      这篇关于使用 Xquery 检索 xml 属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:带有 SQL 的 XML 节点 下一篇:从数据库架构中获取 XML 架构(SQL Server 2008 图表

                  相关文章

                  最新文章

                    <bdo id='O0Z2E'></bdo><ul id='O0Z2E'></ul>
                • <small id='O0Z2E'></small><noframes id='O0Z2E'>

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

                • <tfoot id='O0Z2E'></tfoot>

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