簡體   English   中英

ORACLE SQL:如何從XMLTYPE列中獲取XML元素

[英]ORACLE SQL: How can I get the XML elements from within a column of XMLTYPE

我有一個多個xml文檔,如下所示:

<farm>
    <name>Johns Farm</name>
    <size>50 hectares</size>
    <employees>20</employees>
    <fruits>
        <fruit>Banana</fruit>
        <fruit>Apple</fruit>
        <fruit>Watermelon</fruit>
    </fruits>
</farm>

我在這樣的oracle數據庫中得到了這個:

CREATE TABLE FARM_XML_TABLE
(FARM_NUMBER NUMBER NOT NULL PRIMARY KEY, FARM_XML XMLTYPE NOT NULL)
XMLTYPE COLUMN FARM_XML STORE AS BINARY XML
XMLSCHEMA
  "http://myproject.com/farmschema.xsd"
  ELEMENT "farm";

各種服務器場存儲在FARM_XML列中。 大約有5個

如何以XML格式從多個場的FARM_XML列中僅檢索名稱和員工元素。 我希望輸出如下:

<farm>
<name>Johns Farm</name>
<employees>20</employees>
</farm>

<farm>
<name>Harrys Farm</name>
<employees>10</employees>
</farm>

我試過這樣做,但輸出不是我想要的所有xml元素。

SELECT extract(FARM_XML, 'farm/name').getStringVal()
FROM FARM_XML_TABLE;

Oracle安裝程序

CREATE TABLE FARM_XML_TABLE(
  FARM_NUMBER NUMBER PRIMARY KEY,
  FARM_XML XMLTYPE NOT NULL
)
XMLTYPE COLUMN FARM_XML STORE AS BINARY XML;

INSERT INTO FARM_XML_TABLE VALUES(
  1,
  XMLtype( '<farm>
    <name>Johns Farm</name>
    <size>50 hectares</size>
    <employees>20</employees>
    <fruits>
        <fruit>Banana</fruit>
        <fruit>Apple</fruit>
        <fruit>Watermelon</fruit>
    </fruits>
</farm>' )
);

查詢1 - 重建XML

SELECT FARM_NUMBER,
       XMLElement(
         "farm",
         XMLElement( "name",      EXTRACTVALUE( farm_xml, '/farm/name' ) ),
         XMLElement( "employees", EXTRACTVALUE( farm_xml, '/farm/employees' ) )
       ) AS xml
FROM   FARM_XML_TABLE;

或(更新 - 更簡單的版本):

SELECT FARM_NUMBER,
       XMLElement(
         "farm",
         EXTRACT( farm_xml, '/farm/name' ),
         EXTRACT( farm_xml, '/farm/employees' )
       ) AS xml
FROM   FARM_XML_TABLE;

查詢2 - 從現有XML中刪除不匹配的元素

SELECT FARM_NUMBER,
       DELETEXML(
         farm_xml,
         '/farm/*[name()!=''name''][name()!=''employees'']'
       ) AS xml
FROM   FARM_XML_TABLE;

輸出

(兩者輸出相同)

FARM_NUMBER XML
----------- -------------------------------------------------------------
          1 <farm><name>Johns Farm</name><employees>20</employees></farm>

暫無
暫無

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

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