2011-08-19 6 views
0

오라클 제공 도구 (XSL 프로세서 패키지 내에서 XSL 프로세서 패키지)를 사용하여 XSL 스타일 시트를 처리하기위한 수용 가능한 규칙에 따라 Java 확장을 갖는 간단한 XSL을 변환하기 위해 DBMS_XSLProcessor (pl/sql 패키지 만 해당)를 얻으려고 노력했습니다. 데이터베이스뿐만 아니라 자바 기반의 XML Developers Kit- 데이터베이스 외부의 XDK). 여기 DBMS_XSLProcessor는 확장 기능이있는 스타일 시트를 처리합니까?

는 (약간 11gR1 데이터베이스의 XSLT 예에 주어진 math.xml 샘플에서 수정) 샘플 XML 문서 ( ceil.xml) 여기

<?xml version="1.0"?> 
<doc> 
    <n1>2.4</n1> 
</doc> 

천장을 만들다라는 내 XSL은입니다. XSL :

DECLARE 
    indoc VARCHAR2(2000); 
    xsldoc VARCHAR2(2000); 
    myParser dbms_xmlparser.Parser; 
    indomdoc dbms_xmldom.domdocument; 
    xsltdomdoc dbms_xmldom.domdocument; 
    xsl dbms_xslprocessor.stylesheet; 
    outdomdocf dbms_xmldom.domdocumentfragment; 
    outnode dbms_xmldom.domnode; 
    proc dbms_xslprocessor.processor; 
    buf varchar2(2000); 

BEGIN 

    indoc := '<?xml version="1.0"?><doc><n1>2.4</n1></doc>'; 

    dbms_output.put_line('Input document [' || indoc || ']'); 

    xsldoc := 
     '<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:mth="http://www.oracle.com/XSL/Transform/java/java.lang.Math"> 
     <xsl:template match="/"> 
     Should ciel n1 to "3": <xsl:value-of select="mth:ceil(//n1)"/> 
     </xsl:template> 
     </xsl:stylesheet>'; 

    dbms_output.put_line('before creating new parser:' || systimestamp); 
    myParser := dbms_xmlparser.newParser; 
    dbms_output.put_line('before parsing XML Doc:' || systimestamp); 
    dbms_xmlparser.parseBuffer(myParser, indoc); 

    indomdoc := dbms_xmlparser.getDocument(myParser); 
    dbms_output.put_line('before pulling parsed DOM of XML :' || systimestamp); 
    dbms_xmldom.writetobuffer(indomdoc, buf); 
    dbms_output.put_line(buf); 

    dbms_xmlparser.parseBuffer(myParser, xsldoc); 
    xsltdomdoc := dbms_xmlparser.getDocument(myParser); 
    dbms_output.put_line('before pulling parsed DOM of XSL :' || systimestamp); 

    xsl := dbms_xslprocessor.newstylesheet(xsltdomdoc, ''); 
    proc := dbms_xslprocessor.newProcessor; 

    --apply stylesheet to DOM document 
    dbms_output.put_line('before processing XSL:' || systimestamp); 
    outdomdocf := dbms_xslprocessor.processxsl(proc, xsl, indomdoc); 
    outnode := dbms_xmldom.makenode(outdomdocf); 

    dbms_xmldom.writeToBuffer(outnode, buf); 
    dbms_output.put_line('after writing to output buffer:' || systimestamp); 
    dbms_output.put_line('Length of output =[' || LENGTH(buf) || ']'); 
    dbms_output.put_line(buf); 

END; 
/
: 여기

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:mth="http://www.oracle.com/XSL/Transform/java/java.lang.Math" 
> 
    <xsl:template match="/"> 
    Should ciel n1 to "3": <xsl:value-of select="mth:ceil(//n1)"/> 
    </xsl:template> 
</xsl:stylesheet> 

내 간단한 PL/SQL 익명 블록 입력하면, oraxsl 유틸리티를 사용하는 경우에는이 같은 코드는 UNIX 프롬프트에서 작동

Input document [<?xml version="1.0"?><doc><n1>2.4</n1></doc>] 
before creating new parser:19-AUG-11 03.32.33.471688000 PM -07:00 
before parsing XML Doc:19-AUG-11 03.32.33.472413000 PM -07:00 
before pulling parsed DOM of XML :19-AUG-11 03.32.33.476298000 PM -07:00 
<?xml version="1.0"?> 
<doc> 
<n1>2.4</n1> 
</doc> 

before pulling parsed DOM of XSL :19-AUG-11 03.32.33.490319000 PM -07:00 
DECLARE 
* 
ERROR at line 1: 
ORA-31011: XML parsing failed 
ORA-19202: Error occurred in XML processing 
LPX-00607: Invalid reference: 'ceil'. 
ORA-06512: at "XDB.DBMS_XSLPROCESSOR", line 759 
ORA-06512: at "XDB.DBMS_XSLPROCESSOR", line 782 
ORA-06512: at line 44 

...

-->oraxsl ceil.xml ceil.xsl 
<?xml version = '1.0' encoding = 'UTF-8'?> 

Should ciel n1 to "3": 3 
--> 

어떤 아이디어 이유 :는 SQL 프롬프트에서이 작업을 실행

나에게 다음과 같은 출력 (오류)를 제공합니다 자바 확장, 그냥 작동하지 내장 된 기능을 말하는거야? 이것은 Oracle Enterprise Edition 데이터베이스 릴리스 11.1.0.6입니다.

도움 주셔서 감사합니다.

답변

0

Oracle XSLT proecssor를 사용하는 데 도움이되지 않지만 XSLT에서 Java를 호출하는 표준이 없음을 알 수 있습니다. 각 프로세서는 자체 기능을 수행합니다.

+0

네, 맞습니다. 나는 XSL 표준을 느슨하게 말하려고했다. 내 질문을 편집했습니다. – Abhijeet

관련 문제