dbertoni 01/05/10 11:04:27
Modified: c/src/XSLT XSLTEngineImpl.cpp XSLTEngineImpl.hpp
Log:
Changes to use the EntityResolver before using an internal InputSource.
Revision Changes Path
1.97 +39 -5 xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp
Index: XSLTEngineImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp,v
retrieving revision 1.96
retrieving revision 1.97
diff -u -r1.96 -r1.97
--- XSLTEngineImpl.cpp 2001/05/02 15:56:02 1.96
+++ XSLTEngineImpl.cpp 2001/05/10 18:04:20 1.97
@@ -78,6 +78,7 @@
#include <sax/DocumentHandler.hpp>
+#include <sax/EntityResolver.hpp>
#include <sax/Locator.hpp>
#include <sax/SAXException.hpp>
#include <util/PlatformUtils.hpp>
@@ -647,17 +648,30 @@
if(doc == 0)
{
- XSLTInputSource inputSource(c_wstr(urlString));
+ EntityResolver* const theResolver =
+ m_parserLiaison.getEntityResolver();
- if(0 != docHandler)
+ if (theResolver == 0)
{
- m_parserLiaison.parseXMLStream(inputSource,
*docHandler);
+ XSLTInputSource inputSource(c_wstr(urlString));
- doc = docToRegister;
+ doc = parseXML(inputSource, docHandler, docToRegister);
}
else
{
- doc = m_parserLiaison.parseXMLStream(inputSource);
+ InputSource* const resolverInputSource =
+ theResolver->resolveEntity(0,
c_wstr(urlString));
+
+ if (resolverInputSource != 0)
+ {
+ doc = parseXML(*resolverInputSource,
docHandler, docToRegister);
+ }
+ else
+ {
+ XSLTInputSource
inputSource(c_wstr(urlString));
+
+ doc = parseXML(inputSource, docHandler,
docToRegister);
+ }
}
if (doc != 0)
@@ -667,6 +681,26 @@
}
return doc;
+}
+
+
+
+XalanDocument*
+XSLTEngineImpl::parseXML(
+ const InputSource& inputSource,
+ DocumentHandler* docHandler,
+ XalanDocument* docToRegister)
+{
+ if(0 != docHandler)
+ {
+ m_parserLiaison.parseXMLStream(inputSource, *docHandler);
+
+ return docToRegister;
+ }
+ else
+ {
+ return m_parserLiaison.parseXMLStream(inputSource);
+ }
}
1.66 +19 -1 xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp
Index: XSLTEngineImpl.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -r1.65 -r1.66
--- XSLTEngineImpl.hpp 2001/05/02 15:56:04 1.65
+++ XSLTEngineImpl.hpp 2001/05/10 18:04:22 1.66
@@ -119,9 +119,10 @@
-// Forward definitions
+// Forward declarations...
class DOMSupport;
class GenerateEvent;
+class InputSource;
class PrintWriter;
class ResultTreeFragBase;
class StylesheetConstructionContext;
@@ -366,6 +367,23 @@
const XalanDOMString& urlString,
DocumentHandler* docHandler,
XalanDocument* docToRegister);
+
+ /**
+ * Read in the XML file, either producing a Document or calling SAX
events,
+ * and register the document in a table. If the document has already
been
+ * read in, it will not be reparsed.
+ *
+ * @param inputSource location of the XML
+ * @param docHandler pointer to SAX event handler
+ * @param docToRegister if using a SAX event handler, the object to
register in the source docs table.
+ * @return document object, which represents the parsed XML
+ * @exception SAXException
+ */
+ XalanDocument*
+ parseXML(
+ const InputSource& inputSource,
+ DocumentHandler* docHandler,
+ XalanDocument* docToRegister);
/**
* Reset the state of the XSL processor by reading in a new XSL
stylesheet
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]