PL/SQL 提取 XML 命名空间值

PL/SQL extract XML namespace value

我有 XML 带有这个 ROOT 标签的文件

<DEFeatureDataset xsi:type='typens:DEFeatureDataset'
                    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
                    xmlns:xs='http://www.w3.org/2001/XMLSchema'
                    xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.1'>

如何使用 xml 查询在 select 语句中提取第三个命名空间值“http://www.esri.com/schemas/ArcGIS/10.1”?

来自

SELECT XMLQUERY(
         '/DEFeatureDataset/namespace-uri-for-prefix("typens",.)'
         PASSING XMLTYPE( xml ) RETURNING CONTENT
       ) AS typens
FROM   table_name;

SELECT x.*
FROM   table_name t
       OUTER APPLY XMLTABLE(
         '/DEFeatureDataset'
         PASSING XMLTYPE( t.xml )
         COLUMNS
           typens VARCHAR2(100) PATH './namespace-uri-for-prefix("typens",.)'
       ) x

其中,对于示例数据:

CREATE TABLE table_name ( xml ) AS
SELECT '<DEFeatureDataset
  xsi:type="typens:DEFeatureDataset"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:typens="http://www.esri.com/schemas/ArcGIS/10.1"></DEFeatureDataset>' FROM DUAL

双输出:

| TYPENS                                  |
| :-------------------------------------- |
| http://www.esri.com/schemas/ArcGIS/10.1 |

db<>fiddle here