久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

  • <legend id='8YsTP'><style id='8YsTP'><dir id='8YsTP'><q id='8YsTP'></q></dir></style></legend>

    <small id='8YsTP'></small><noframes id='8YsTP'>

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

      1. <tfoot id='8YsTP'></tfoot>
        • <bdo id='8YsTP'></bdo><ul id='8YsTP'></ul>

        如何從 XMLType 節點中提取元素路徑?

        How to extract element-path from XMLType Node?(如何從 XMLType 節點中提取元素路徑?)

              <bdo id='DjYZe'></bdo><ul id='DjYZe'></ul>
                <tbody id='DjYZe'></tbody>
              <legend id='DjYZe'><style id='DjYZe'><dir id='DjYZe'><q id='DjYZe'></q></dir></style></legend>
                <tfoot id='DjYZe'></tfoot>

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

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

                  本文介紹了如何從 XMLType 節點中提取元素路徑?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  限時送ChatGPT賬號..

                  我想要一個關于 XML 文檔的選擇語句,并且一列應該返回每個節點的路徑.

                  I would like to have a select statement on an XML document and one column should return me the path of each node.

                  例如,給定數據

                  SELECT * 
                  FROM TABLE(XMLSequence(
                    XMLTYPE('<?xml version="1.0"?>
                      <users><user><name>user1</name></user>
                             <user><name>user2</name></user>
                             <group>
                                <user><name>user3</name></user>
                             </group>
                             <user><name>user4</name></user>
                      </users>').extract('/*//*[text()]'))) t;
                  

                  結果

                  column_value
                  --------
                  <user><name>user1</name></user>
                  <user><name>user2</name></user>
                  <user><name>user3</name></user>
                  <user><name>user4</name></user>
                  

                  我想要這樣的結果:

                  path                     value
                  ------------------------ --------------
                  /users/user/name         user1
                  /users/user/name         user2
                  /users/group/user/name   user3
                  /users/user/name         user4
                  

                  我不知道如何做到這一點.我認為有兩件事必須正確協同工作:

                  I can not see how to get to this. I figure there are two thing that have to work together properly:

                  • 我可以使用單個操作或方法從 XMLType 中提取 path,或者我必須使用 string-magic 來執行此操作嗎??
                  • 什么是正確的 XPath 表達式,以便我獲得整個元素路徑(如果可能的話),例如.<users><group><user><name>user3</name></user></group></user><;用戶>user3?
                  • Can I extract the path from an XMLType with a single operation or method, or do I have to do this with string-magic?
                  • What is the correct XPath expression so that I do get the whole element path (if thats possible), eg. <users><group><user><name>user3</name></user></group></user> insead of <user><name>user3</name></user>?

                  也許我還沒有完全理解 XMLType.可能是我需要不同的方法,但我看不到.

                  Maybe I am not understanding XMLType fully, yet. It could be I need a different approach, but I can not see it.

                  旁注:

                  • 在最終版本中,XML 文檔將來自表的 CLOB,而不是靜態文檔.
                  • path 列當然也可以使用點或其他任何東西,并且最初的斜杠不是問題,任何表示都可以.
                  • 此外,我不介意每個內部節點是否也獲得一個結果行(可能將 null 作為 value),而不僅僅是帶有 text() 的那些 在其中(這是我真正感興趣的).
                  • 最后,我需要將 pathtail 元素 分開(在示例中總是 "name",但這會有所不同稍后),即 ('/users/groups/user', 'name', 'user3'),我可以單獨處理.
                  • In the final version the XML document will be coming from CLOBs of a table, not a static document.
                  • The path column can of course also use dots or whatever and the initial slash is not the issue, any representation would do.
                  • Also I would not mind if every inner node also gets a result row (possibly with null as value), not only the ones with text() in it (which is what I am really interested in).
                  • In the end I will need the tail element of path separate (always "name" in the example here, but this will vary later), i.e. ('/users/groups/user', 'name', 'user3'), I can deal with that separately.

                  推薦答案

                  您可以在 XMLTable 函數來自 Oracle XML DB XQuery 函數集:

                  You can achieve that with help of XMLTable function from Oracle XML DB XQuery function set:

                  select * from 
                    XMLTable(
                      '
                       declare function local:path-to-node( $nodes as node()* )  as xs:string* {
                         $nodes/string-join(ancestor-or-self::*/name(.), ''/'')
                       };
                       for $i in $rdoc//name 
                         return <ret><name_path>{local:path-to-node($i)}</name_path>{$i}</ret>
                      '
                      passing 
                      XMLParse(content '
                        <users><user><name>user1</name></user>
                             <user><name>user2</name></user>
                             <group>
                                <user><name>user3</name></user>
                             </group>
                             <user><name>user4</name></user>
                        </users>'
                      )
                      as "rdoc"
                      columns 
                        name_path  varchar2(4000) path '//ret/name_path',
                        name_value varchar2(4000) path '//ret/name'
                  
                    )
                  

                  對我來說,XQuery 看起來至少比 XSLT 對 XML 數據操作更直觀.

                  For me XQuery looks at least more intuitive for XML data manipulation than XSLT.

                  您可以在此處找到有用的 XQuery 函數集.

                  You can find useful set of XQuery functions here.

                  更新 1

                  我想您在最后階段需要具有完整數據的完全簡單的數據集.這個目標可以通過復雜的方式達到,下面一步一步構建,但是這個變體非常耗費資源.我建議審查最終目標(選擇一些特定的記錄,計算元素數量等),然后簡化此解決方案或完全更改它.

                  I suppose that you need totally plain dataset with full data at last stage. This target can be reached by complicated way, constructed step-by-step below, but this variant is very resource-angry. I propose to review final target (selecting some specific records, count number of elements etc.) and after that simplify this solution or totally change it.

                  更新 2

                  除了最后一步之外,所有步驟都從此更新中刪除,因為@A.B.Cade 在評論中提出了更優雅的解決方案.此解決方案在下面的更新 3 部分中提供.

                  All steps deleted from this Update except last because @A.B.Cade proposed more elegant solution in comments. This solution provided in Update 3 section below.

                  Step 1 - 構建帶有對應查詢結果的 id 數據集

                  Step 1 - Constructing dataset of id's with corresponding query results

                  第 2 步 - 聚合到單個 XML 行

                  Step 2 - Aggregating to single XML row

                  第 3 步 - 最后通過使用 XMLTable 查詢壓縮的 XML 獲得完整的普通數據集

                  Step 3 - Finally get full plain dataset by querying constracted XML with XMLTable

                  with xmlsource as (
                    -- only for purpose to write long string only once
                    select '
                        <users><user><name>user1</name></user>
                             <user><name>user2</name></user>
                             <group>
                                <user><name>user3</name></user>
                             </group>
                             <user><name>user4</name></user>
                        </users>' xml_string
                     from dual   
                  ),
                  xml_table as ( 
                    -- model of xmltable
                    select 10 id, xml_string xml_data from xmlsource union all 
                    select 20 id, xml_string xml_data from xmlsource union all 
                    select 30 id, xml_string xml_data from xmlsource 
                  ) 
                  select  *
                  from
                    XMLTable(
                      '
                          for $entry_user in $full_doc/full_list/list_entry/name_info
                            return <tuple>
                                     <id>{data($entry_user/../@id_value)}</id>
                                     <path>{$entry_user/name_path/text()}</path>
                                     <name>{$entry_user/name_value/text()}</name>
                                    </tuple> 
                      '
                      passing ( 
                        select  
                          XMLElement("full_list", 
                            XMLAgg(     
                              XMLElement("list_entry",
                                XMLAttributes(id as "id_value"),
                                XMLQuery(
                                  '
                                   declare function local:path-to-node( $nodes as node()* )  as xs:string* {
                                     $nodes/string-join(ancestor-or-self::*/name(.), ''/'')
                                   };(: function to construct path :) 
                                   for $i in $rdoc//name return <name_info><name_path>{local:path-to-node($i)}</name_path><name_value>{$i/text()}</name_value></name_info>
                                  '
                                  passing by value XMLParse(content xml_data) as "rdoc"
                                  returning content
                                )
                              )
                            )
                          )        
                          from xml_table
                      )   
                      as "full_doc"      
                      columns
                        id_val   varchar2(4000) path '//tuple/id',
                        path_val varchar2(4000) path '//tuple/path',
                        name_val varchar2(4000) path '//tuple/name'
                    )    
                  

                  更新 3

                  正如@A.B.Cade 在他的評論中提到的,有非常簡單的方法可以將 ID 與 XQuery 結果連接起來.

                  As mentioned by @A.B.Cade in his comment, there are really simple way to join ID's with XQuery results.

                  因為我不喜歡答案中的外部鏈接,下面的代碼代表他的 SQL 小提琴,有點適應這個答案的數據源:

                  Because I don't like external links in answers, code below represents his SQL fiddle, a little bit adapted to the data source from this answer:

                  with xmlsource as (
                    -- only for purpose to write long string only once
                    select '
                        <users><user><name>user1</name></user>
                             <user><name>user2</name></user>
                             <group>
                                <user><name>user3</name></user>
                             </group>
                             <user><name>user4</name></user>
                        </users>' xml_string
                     from dual   
                  ),
                  xml_table as ( 
                    -- model of xmltable
                    select 10 id, xml_string xml_data from xmlsource union all 
                    select 20 id, xml_string xml_data from xmlsource union all
                    select 30 id, xml_string xml_data from xmlsource
                  )
                  select xd.id, x.*  from
                  xml_table xd,
                    XMLTable(
                      'declare function local:path-to-node( $nodes as node()* )  as xs:string* {$nodes/string-join(ancestor-or-self::*/name(.), ''/'')     };     for $i in $rdoc//name        return <ret><name_path>{local:path-to-node($i)}</name_path>{$i}</ret>    '
                      passing
                      XMLParse(content xd.xml_data
                      )
                      as "rdoc"
                      columns
                        name_path  varchar2(4000) path '//ret/name_path',
                        name_value varchar2(4000) path '//ret/name'
                  
                    ) x
                  

                  這篇關于如何從 XMLType 節點中提取元素路徑?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  SQL query to get all products, categories and meta data woocommerce/wordpress(獲取所有產品、類別和元數據的 SQL 查詢 woocommerce/wordpress)
                  Can I figure out a list of databases and the space used by SQL Server instances without writing SQL queries?(我可以在不編寫 SQL 查詢的情況下找出數據庫列表和 SQL Server 實例使用的空間嗎?) - IT屋-程序員軟件開發
                  How to create a login to a SQL Server instance?(如何創建對 SQL Server 實例的登錄?)
                  How to know the version and edition of SQL Server through registry search(如何通過注冊表搜索知道SQL Server的版本和版本)
                  Why do I get a quot;data type conversion errorquot; with ExecuteNonQuery()?(為什么會出現“數據類型轉換錯誤?使用 ExecuteNonQuery()?)
                  How to show an image from a DataGridView to a PictureBox?(如何將 DataGridView 中的圖像顯示到 PictureBox?)

                        <tbody id='XGTBy'></tbody>

                      1. <tfoot id='XGTBy'></tfoot>
                      2. <small id='XGTBy'></small><noframes id='XGTBy'>

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

                        • <legend id='XGTBy'><style id='XGTBy'><dir id='XGTBy'><q id='XGTBy'></q></dir></style></legend>
                          <i id='XGTBy'><tr id='XGTBy'><dt id='XGTBy'><q id='XGTBy'><span id='XGTBy'><b id='XGTBy'><form id='XGTBy'><ins id='XGTBy'></ins><ul id='XGTBy'></ul><sub id='XGTBy'></sub></form><legend id='XGTBy'></legend><bdo id='XGTBy'><pre id='XGTBy'><center id='XGTBy'></center></pre></bdo></b><th id='XGTBy'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='XGTBy'><tfoot id='XGTBy'></tfoot><dl id='XGTBy'><fieldset id='XGTBy'></fieldset></dl></div>
                            主站蜘蛛池模板: 影音先锋中文字幕在线观看 | 国产欧美视频一区 | 亚洲免费精品 | av男人的天堂在线 | 欧美一级大片免费观看 | 欧美日韩视频在线第一区 | 成人水多啪啪片 | 91精品一区二区三区久久久久久 | 中文字幕一区二区三区四区五区 | 四虎影院在线观看av | 亚洲人精品午夜 | 久久精品一 | 欧美日韩视频在线播放 | 日韩一区二区在线观看视频 | 九九国产| 国产成人精品一区二区三区 | 天天色综 | 亚洲精品乱码久久久久久黑人 | 国产片一区二区三区 | 在线中文字幕视频 | 91精品一区二区三区久久久久久 | 亚洲国产成人久久综合一区,久久久国产99 | 国产色视频网站 | 久久天天 | 久久久91精品国产一区二区三区 | 欧美精品综合在线 | 精品粉嫩aⅴ一区二区三区四区 | 一区不卡在线观看 | 日韩在线免费观看视频 | 精品国产一区二区三区免费 | 91精品久久久久久久久 | 超碰操| 日韩成人中文字幕 | 亚洲欧洲日本国产 | 夜夜草 | 欧美精品一区免费 | 激情欧美一区二区三区 | 欧洲亚洲一区二区三区 | 成人av免费在线观看 | 午夜合集 | 亚洲欧美日韩网站 |