오라클 제공 도구 (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입니다.
도움 주셔서 감사합니다.
네, 맞습니다. 나는 XSL 표준을 느슨하게 말하려고했다. 내 질문을 편집했습니다. – Abhijeet