解析XML数据时出现Oracle错误:LPX-00663

时间:2016-10-04 07:19:21

标签: oracle oracle11g xml-parsing

我得到以下错误,任何人都可以帮我解决它。

  

ORA-31011:XML解析失败ORA-19202:错误   发生在XML处理支持LPX-00663: VM   字符串堆栈溢出

我可以在某些网站上看到解决方案为在XmlXslVMCreate()中增加VM StringStack的大小,但没有给出如何执行此操作的步骤。

1 个答案:

答案 0 :(得分:0)

来自Oracle文档。

  

PL / SQL包DBMS_XSLPROCESSOR提供了方便快捷的方法   将单个样式表应用于多个文档的方法。该   这个包的性能优于方法transform(),   因为样式表只被解析一次。

我遇到了同样的问题。解决方法是。这样的事情。

DECLARE
  v_out_clob       CLOB;
  v_in_xml        XMLTYPE;
  v_in_xsl        XMLTYPE;
  ctx_xslproc     dbms_xslprocessor.processor;
  v_in_xsl_dd       dbms_xmldom.DOMDocument;
  v_in_xml_dd       dbms_xmldom.DOMDocument;
  v_styleshet       dbms_xslprocessor.stylesheet;
BEGIN

   v_in_xml := new xmltype('<?xml version="1.0" encoding="ISO-8859-1"?><document></document>');
  v_in_xsl := new xmltype('<?xml version="1.0" encoding="ISO-8859-1"?>
                                   <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                                     <xsl:output method="html" />
                                     <xsl:template match="/">
                                       <html>
                                         <head>
                                           <script type="text/javascript" src="jquery-1.11.1.min.js"></script>
                                         </head>
                                         <body>
                                           <br />
                                         </body>
                                       </html>
                                     </xsl:template>
                                   </xsl:stylesheet>');
  ctx_xslproc   := dbms_xslprocessor.newProcessor;
  v_in_xsl_dd  := dbms_xmldom.newDOMDocument(v_in_xsl);
  v_in_xml_dd  := dbms_xmldom.newDOMDocument(v_in_xml);
  v_styleshet  := dbms_xslprocessor.newStyleSheet(v_in_xsl_dd, NULL);
  dbms_lob.createtemporary(v_out_clob,FALSE);
  dbms_xslprocessor.processXSL(ctx_xslproc,v_styleshet,v_in_xml_dd,v_out_clob);
  dbms_xmldom.freeDocument(v_in_xsl_dd);
  dbms_xmldom.freeDocument(v_in_xml_dd);
  dbms_xslprocessor.freeProcessor(ctx_xslproc);  
  dbms_output.put_line(v_out_clob);

END;