xslt
  • plsql
  • 2016-08-17 5 views 0 likes 
    0

    1.次のコードでは、出力が得られません。このコードを実行した後にDBMS出力ウィンドウに何も表示されません。何が問題なの? 2.属性[@ id = "1"]を参照して名前を1つだけ取得しようとしましたが、すべての名前を取得できますか?plsqlでXMLTABLEを使用してXSL変換を実行するにはどうすればよいですか?

    declare 
        x varchar(100); 
        c1 sys_refcursor; 
        xml clob:= 
        '<?xml version="1.0"?> 
        <Com> 
         <Employee id="1"> 
         <Name>John</Name> 
         <Age>21</Age> 
         <Phone>111111111</Phone> 
         </Employee> 
         <Employee id="2"> 
         <Name>Adam</Name> 
         <Age>22</Age> 
         <Phone>22222222</Phone> 
         </Employee> 
         <Employee id="3"> 
         <Name>David</Name> 
         <Age>22</Age> 
         <Phone>333333333</Phone> 
         </Employee> 
         <Employee id="4"> 
         <Name>Roy</Name> 
         <Age>22</Age> 
         <Phone>44444444</Phone> 
         </Employee> 
        </Com>'; 
    
        xsl clob:= 
        '<?xml version="1.0"?> 
        <xsl:transform version="1.0"                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
        <xsl:output method="text" omit-xml-declaration="yes" indent="no"/> 
        <xsl:template match="/"> 
        <xsl:for-each select="Com/Employee[@id=''1'']"> 
        <![CDATA[<Com>]]> 
        <xsl:value-of select="Name"/> 
        <![CDATA[</Com>]]> 
        </xsl:for-each> 
        </xsl:template> 
        </xsl:transform>'; 
    
    
    
        function fun1 return sys_refcursor 
        as 
        c2 sys_refcursor; 
        begin 
        open c2 for select Names_List from XMLTABLE('/Com/Employee' 
        PASSING XMLTYPE(XMLTRANSFORM(xmltype(xml),xmltype(xsl)).GetClobVal()) 
        columns Names_List varchar(100) path 'Name'); 
        return c2; 
        end; 
        begin 
        c1:=fun1; 
        loop 
        fetch c1 into x; 
        exit when c1%notfound; 
        dbms_output.put_line('Names : '|| x); 
        end loop; 
        end; 
    
    +0

    '[@id = '' 1 '']'を削除して参照してください。 –

    答えて

    0

    これに変更OPEN C2 ...:

    OPEN c2 FOR SELECT Names_List FROM XMLTABLE('/Com' PASSING XMLTRANSFORM(xmltype(xml),xmltype(xsl)) columns Names_List varchar(100) path '/Com'); 
    

    あなたがエラーを取得する場合、それはステップバイステップで作ります。 XMLTRANSFORMの後に:

    <Com>John</Com> 
    

    従業員タグはありません。 XMLTRANSFORMはXMLTypeを返します。 XMLTypeからCLOBを取得してXMLTypeに変換しています。どうして?

    関連する問題