Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
306 views
in Technique[技术] by (71.8m points)

sql - Query Data from XML

I'm trying to fetch specific data from an XML Document using sql statement. This document is as follows:

<?xml version="1.0" encoding="Shift-JIS" ?>
<Ophthalmology xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nsCommon="http://www.joia.or.jp/standardized/namespaces/Common" xmlns:nsREF="http://www.joia.or.jp/standardized/namespaces/REF" xsi:schemaLocation="http://www.joia.or.jp/standardized/namespaces/Common Common_schema.xsd http://www.joia.or.jp/standardized/namespaces/REF REF_schema.xsd">
<nsCommon:Common>
<nsCommon:Company>TOPCON</nsCommon:Company>
<nsCommon:ModelName>KR-800</nsCommon:ModelName>
<nsCommon:MachineNo>01</nsCommon:MachineNo>
<nsCommon:ROMVersion>1.05.08</nsCommon:ROMVersion>
<nsCommon:Version>1.2</nsCommon:Version>
<nsCommon:Date>2016-09-17</nsCommon:Date>
<nsCommon:Time>01:17:35</nsCommon:Time>
<nsCommon:Patient>
<nsCommon:No.>0006</nsCommon:No.>
<nsCommon:ID>0006</nsCommon:ID>
<nsCommon:FirstName></nsCommon:FirstName>
<nsCommon:MiddleName></nsCommon:MiddleName>
<nsCommon:LastName></nsCommon:LastName>
<nsCommon:Sex></nsCommon:Sex>
<nsCommon:Age></nsCommon:Age>
<nsCommon:DOB></nsCommon:DOB>
<nsCommon:NameJ1></nsCommon:NameJ1>
<nsCommon:NameJ2></nsCommon:NameJ2>
</nsCommon:Patient>
<nsCommon:Operator>
<nsCommon:No.></nsCommon:No.>
<nsCommon:ID></nsCommon:ID>
</nsCommon:Operator>
</nsCommon:Common>
<nsREF:Measure type="REF">
<nsREF:VD unit="mm">13.75</nsREF:VD>
<nsREF:DiopterStep unit="D">0.25</nsREF:DiopterStep>
<nsREF:AxisStep unit="deg">1</nsREF:AxisStep>
<nsREF:CylinderMode>-</nsREF:CylinderMode>
<nsREF:REF>
<nsREF:R>
<nsREF:List No="1">
<nsREF:Sphere unit="D">0.50</nsREF:Sphere>
<nsREF:Cylinder unit="D">-1.25</nsREF:Cylinder>
<nsREF:Axis unit="deg">178</nsREF:Axis>
<nsREF:SE unit="D">-0.25</nsREF:SE>
<nsREF:CataractMode></nsREF:CataractMode>
<nsREF:IOLMode></nsREF:IOLMode>
<nsREF:ConfidenceIndex></nsREF:ConfidenceIndex>
</nsREF:List>
<nsREF:List No="2">
<nsREF:Sphere unit="D">0.50</nsREF:Sphere>
<nsREF:Cylinder unit="D">-1.00</nsREF:Cylinder>
<nsREF:Axis unit="deg">177</nsREF:Axis>
<nsREF:SE unit="D">0.00</nsREF:SE>
<nsREF:CataractMode></nsREF:CataractMode>
<nsREF:IOLMode></nsREF:IOLMode>
<nsREF:ConfidenceIndex></nsREF:ConfidenceIndex>
</nsREF:List>
<nsREF:Median>
<nsREF:Sphere unit="D">0.50</nsREF:Sphere>
<nsREF:Cylinder unit="D">-1.00</nsREF:Cylinder>
<nsREF:Axis unit="deg">177</nsREF:Axis>
<nsREF:SE unit="D">0.00</nsREF:SE>
</nsREF:Median>
</nsREF:R>
<nsREF:L>
<nsREF:List No="1">
<nsREF:Sphere unit="D">0.50</nsREF:Sphere>
<nsREF:Cylinder unit="D">-0.50</nsREF:Cylinder>
<nsREF:Axis unit="deg">179</nsREF:Axis>
<nsREF:SE unit="D">0.25</nsREF:SE>
<nsREF:CataractMode></nsREF:CataractMode>
<nsREF:IOLMode></nsREF:IOLMode>
<nsREF:ConfidenceIndex></nsREF:ConfidenceIndex>
</nsREF:List>
<nsREF:List No="2">
<nsREF:Sphere unit="D">0.50</nsREF:Sphere>
<nsREF:Cylinder unit="D">-0.50</nsREF:Cylinder>
<nsREF:Axis unit="deg">179</nsREF:Axis>
<nsREF:SE unit="D">0.25</nsREF:SE>
<nsREF:CataractMode></nsREF:CataractMode>
<nsREF:IOLMode></nsREF:IOLMode>
<nsREF:ConfidenceIndex></nsREF:ConfidenceIndex>
</nsREF:List>
<nsREF:List No="3">
<nsREF:Sphere unit="D">0.50</nsREF:Sphere>
<nsREF:Cylinder unit="D">-0.50</nsREF:Cylinder>
<nsREF:Axis unit="deg">179</nsREF:Axis>
<nsREF:SE unit="D">0.25</nsREF:SE>
<nsREF:CataractMode></nsREF:CataractMode>
<nsREF:IOLMode></nsREF:IOLMode>
<nsREF:ConfidenceIndex></nsREF:ConfidenceIndex>
</nsREF:List>
<nsREF:Median>
<nsREF:Sphere unit="D">0.50</nsREF:Sphere>
<nsREF:Cylinder unit="D">-0.50</nsREF:Cylinder>
<nsREF:Axis unit="deg">179</nsREF:Axis>
<nsREF:SE unit="D">0.25</nsREF:SE>
</nsREF:Median>
</nsREF:L>
</nsREF:REF>
<nsREF:PD>
<nsREF:WorkingDistance unit="cm"></nsREF:WorkingDistance>
<nsREF:Distance unit="mm">68.50</nsREF:Distance>
<nsREF:Near unit="mm">68.50</nsREF:Near>
</nsREF:PD>
</nsREF:Measure>
</Ophthalmology>
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Oracle Setup

CREATE TABLE data ( xml XMLType );

DECLARE
  xmlString CLOB := '<?xml version="1.0" encoding="Shift-JIS" ?>
<Ophthalmology xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nsCommon="http://www.joia.or.jp/standardized/namespaces/Common" xmlns:nsREF="http://www.joia.or.jp/standardized/namespaces/REF" xsi:schemaLocation="http://www.joia.or.jp/standardized/namespaces/Common Common_schema.xsd http://www.joia.or.jp/standardized/namespaces/REF REF_schema.xsd">
    <nsCommon:Common>
        <nsCommon:Company>TOPCON</nsCommon:Company>
        <nsCommon:ModelName>KR-800</nsCommon:ModelName>
        <nsCommon:MachineNo>01</nsCommon:MachineNo>
        <nsCommon:ROMVersion>1.05.08</nsCommon:ROMVersion>
        <nsCommon:Version>1.2</nsCommon:Version>
        <nsCommon:Date>2016-09-17</nsCommon:Date>
        <nsCommon:Time>01:17:35</nsCommon:Time>
        <nsCommon:Patient>
            <nsCommon:No.>0006</nsCommon:No.>
            <nsCommon:ID>0006</nsCommon:ID>
            <nsCommon:FirstName></nsCommon:FirstName>
            <nsCommon:MiddleName></nsCommon:MiddleName>
            <nsCommon:LastName></nsCommon:LastName>
            <nsCommon:Sex></nsCommon:Sex>
            <nsCommon:Age></nsCommon:Age>
            <nsCommon:DOB></nsCommon:DOB>
            <nsCommon:NameJ1></nsCommon:NameJ1>
            <nsCommon:NameJ2></nsCommon:NameJ2>
        </nsCommon:Patient>
        <nsCommon:Operator>
            <nsCommon:No.></nsCommon:No.>
            <nsCommon:ID></nsCommon:ID>
        </nsCommon:Operator>
    </nsCommon:Common>
    <nsREF:Measure type="REF">
        <nsREF:VD unit="mm">13.75</nsREF:VD>
        <nsREF:DiopterStep unit="D">0.25</nsREF:DiopterStep>
        <nsREF:AxisStep unit="deg">1</nsREF:AxisStep>
        <nsREF:CylinderMode>-</nsREF:CylinderMode>
        <nsREF:REF>
            <nsREF:R>
                <nsREF:List No="1">
                    <nsREF:Sphere unit="D">0.50</nsREF:Sphere>
                    <nsREF:Cylinder unit="D">-1.25</nsREF:Cylinder>
                    <nsREF:Axis unit="deg">178</nsREF:Axis>
                    <nsREF:SE unit="D">-0.25</nsREF:SE>
                    <nsREF:CataractMode></nsREF:CataractMode>
                    <nsREF:IOLMode></nsREF:IOLMode>
                    <nsREF:ConfidenceIndex></nsREF:ConfidenceIndex>
                </nsREF:List>
                <nsREF:List No="2">
                    <nsREF:Sphere unit="D">0.50</nsREF:Sphere>
                    <nsREF:Cylinder unit="D">-1.00</nsREF:Cylinder>
                    <nsREF:Axis unit="deg">177</nsREF:Axis>
                    <nsREF:SE unit="D">0.00</nsREF:SE>
                    <nsREF:CataractMode></nsREF:CataractMode>
                    <nsREF:IOLMode></nsREF:IOLMode>
                    <nsREF:ConfidenceIndex></nsREF:ConfidenceIndex>
                </nsREF:List>
                <nsREF:Median>
                    <nsREF:Sphere unit="D">0.50</nsREF:Sphere>
                    <nsREF:Cylinder unit="D">-1.00</nsREF:Cylinder>
                    <nsREF:Axis unit="deg">177</nsREF:Axis>
                    <nsREF:SE unit="D">0.00</nsREF:SE>
                </nsREF:Median>
            </nsREF:R>
            <nsREF:L>
                <nsREF:List No="1">
                    <nsREF:Sphere unit="D">0.50</nsREF:Sphere>
                    <nsREF:Cylinder unit="D">-0.50</nsREF:Cylinder>
                    <nsREF:Axis unit="deg">179</nsREF:Axis>
                    <nsREF:SE unit="D">0.25</nsREF:SE>
                    <nsREF:CataractMode></nsREF:CataractMode>
                    <nsREF:IOLMode></nsREF:IOLMode>
                    <nsREF:ConfidenceIndex></nsREF:ConfidenceIndex>
                </nsREF:List>
                <nsREF:List No="2">
                    <nsREF:Sphere unit="D">0.50</nsREF:Sphere>
                    <nsREF:Cylinder unit="D">-0.50</nsREF:Cylinder>
                    <nsREF:Axis unit="deg">179</nsREF:Axis>
                    <nsREF:SE unit="D">0.25</nsREF:SE>
                    <nsREF:CataractMode></nsREF:CataractMode>
                    <nsREF:IOLMode></nsREF:IOLMode>
                    <nsREF:ConfidenceIndex></nsREF:ConfidenceIndex>
                </nsREF:List>
                <nsREF:List No="3">
                    <nsREF:Sphere unit="D">0.50</nsREF:Sphere>
                    <nsREF:Cylinder unit="D">-0.50</nsREF:Cylinder>
                    <nsREF:Axis unit="deg">179</nsREF:Axis>
                    <nsREF:SE unit="D">0.25</nsREF:SE>
                    <nsREF:CataractMode></nsREF:CataractMode>
                    <nsREF:IOLMode></nsREF:IOLMode>
                    <nsREF:ConfidenceIndex></nsREF:ConfidenceIndex>
                </nsREF:List>
                <nsREF:Median>
                    <nsREF:Sphere unit="D">0.50</nsREF:Sphere>
                    <nsREF:Cylinder unit="D">-0.50</nsREF:Cylinder>
                    <nsREF:Axis unit="deg">179</nsREF:Axis>
                    <nsREF:SE unit="D">0.25</nsREF:SE>
                </nsREF:Median>
            </nsREF:L>
        </nsREF:REF>
        <nsREF:PD>
            <nsREF:WorkingDistance unit="cm"></nsREF:WorkingDistance>
            <nsREF:Distance unit="mm">68.50</nsREF:Distance>
            <nsREF:Near unit="mm">68.50</nsREF:Near>
        </nsREF:PD>
    </nsREF:Measure>
</Ophthalmology>';
BEGIN
  INSERT INTO DATA ( xml ) VALUES ( XMLType( xmlString ) );
END;
/

COMMIT;

Query:

SELECT x.*
FROM Data d,
     XMLTABLE (
       XMLNAMESPACES(
         'http://www.joia.or.jp/standardized/namespaces/Common' AS "nsCommon",
         'http://www.joia.or.jp/standardized/namespaces/REF' AS "nsREF"
       ),
       '//Ophthalmology/nsREF:Measure/nsREF:REF/nsREF:R/nsREF:Median'
       PASSING d.xml
       COLUMNS RSphere   NUMBER(5,2) PATH '//nsREF:Sphere',
               RCylinder NUMBER(5,2) PATH '//nsREF:Cylinder',
               RAxis     NUMBER(5,2) PATH '//nsREF:Axis',
               RSE       NUMBER(5,2) PATH '//nsREF:SE'
     ) x;

Output:

   RSPHERE  RCYLINDER      RAXIS        RSE
---------- ---------- ---------- ----------
        .5         -1        177          0 

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...