⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlj_transform.c

📁 gcc的组建
💻 C
📖 第 1 页 / 共 2 页
字号:
            xmlHashScan (stylesheet->cdataSection,                   cdataSectionScanner, &info);              {          jstring result = (jstring)            (*env)->CallObjectMethod (env,                                      info.stringBuffer,                                      toStringMethodID);                    jstring nameString =            (*env)->NewStringUTF (env,                                  "cdata-section-elements");                    jobject prevValue            =            (*env)->CallObjectMethod (env,                                      outputProperties,                                      setPropertyMethod,                                      nameString, result);          if (NULL != prevValue)            {              (*env)->DeleteLocalRef (env, prevValue);            }          (*env)->DeleteLocalRef (env, nameString);        }            (*env)->DeleteLocalRef (env, info.stringBuffer);    }}/* * Returns the parameter array for the given GnomeTransformer. */jobjectArrayxmljGetParameterArray (JNIEnv *env, jobject transformer){  jclass cls;  jmethodID method;  cls = (*env)->GetObjectClass (env, transformer);  if (cls == NULL)    {      return NULL;    }  method = (*env)->GetMethodID (env, cls, "getParameterArray",                                "()[Ljava/lang/String;");  if (method == NULL)    {      return NULL;    }  return (jobjectArray) (*env)->CallObjectMethod (env, transformer, method);}/* Convert parameter array to xmlChar ** */const char **xmljGetParameters (JNIEnv *env, jobjectArray pa){  int i, len;  const char **parameters;  len = (*env)->GetArrayLength (env, pa);  parameters = (const char **) malloc ((len + 2) * sizeof (const char *));  if (parameters == NULL)    {      return NULL;    }    for (i = 0; i < len; i++)    {      jstring string = (jstring) (*env)->GetObjectArrayElement (env, pa, i);            if (string != NULL)        {          parameters[i] = (*env)->GetStringUTFChars (env, string, NULL);        }      else        {          parameters[i] = NULL;        }    }    parameters[len] = 0;  parameters[len + 1] = 0;  return parameters;}  /* Release parameter strings */voidxmljFreeParameters (JNIEnv *env, jobjectArray pa, const char **parameters){   int i, len;    len = (*env)->GetArrayLength (env, pa);  for (i = 0; i < len; i++)    {      jstring string = (jstring) (*env)->GetObjectArrayElement (env, pa, i);      if (string != NULL)        {          (*env)->ReleaseStringUTFChars (env, string, parameters[i]);        }    }    free (parameters);}xmlDocPtrxmljTransform (JNIEnv *env, jobject transformer, xmlDocPtr source){  xsltStylesheetPtr stylesheet;  xmlDocPtr result;  jobjectArray pa;  const char **parameters;  stylesheet = xmljGetStylesheetID (env, transformer);  pa = xmljGetParameterArray (env, transformer);  parameters = xmljGetParameters (env, pa);  if (parameters == NULL)    {      xmljThrowException (env, "javax/xml/transform/TransformerException",                          "Couldn't allocate memory for parameters");      return NULL;    }  result = xsltApplyStylesheet (stylesheet, source, parameters);  xmljFreeParameters (env, pa, parameters);  if (result == NULL)    {      xmljThrowException (env, "javax/xml/transform/TransformerException",                          "XSLT transformation failed");    }  return result;}voidxmljTransformToSAX (JNIEnv *env, jobject transformer, xmlDocPtr source,                    jobject callback){  xsltStylesheetPtr stylesheet;  int ret;  jobjectArray pa;  const char **parameters;  xmlSAXHandlerPtr sax;  stylesheet = xmljGetStylesheetID (env, transformer);  pa = xmljGetParameterArray (env, transformer);  parameters = xmljGetParameters (env, pa);  if (parameters == NULL)    {      xmljThrowException (env, "javax/xml/transform/TransformerException",                          "Couldn't allocate memory for parameters");      return;    }  sax = NULL; /* TODO link up sax and callback */  ret = xsltRunStylesheet (stylesheet, source, parameters, NULL, sax, NULL);  xmljFreeParameters (env, pa, parameters);  if (ret == -1)    {      xmljThrowException (env, "javax/xml/transform/TransformerException",                          "XSLT transformation failed");    }}xmlDocPtrxmljDocLoader (const xmlChar *uri, xmlDictPtr dict, int options,               void *ctxt, xsltLoadType type){  JNIEnv *env;  jclass xmljClass;  jclass inputStreamClass;  jmethodID getInputStream;  jmethodID getDetectBuffer;  jstring systemId;  jobject inputStream;  jbyteArray detectBuffer;  fflush(stdout);  env = xmljGetJNIEnv ();  if (!env)    {      return NULL;    }  xmljClass = (*env)->FindClass (env, "gnu/xml/libxmlj/util/XMLJ");  if (!xmljClass)    {      return NULL;    }  getInputStream =    (*env)->GetStaticMethodID (env, xmljClass, "xmljGetInputStream",                               "(Ljava/lang/String;Ljava/lang/String;)Lgnu/xml/libxmlj/util/NamedInputStream;");  if (!getInputStream)    {      return NULL;    }  systemId = xmljNewString (env, uri);  inputStream = (*env)->CallStaticObjectMethod (env, xmljClass, getInputStream,                                                stylesheetURL, systemId);  if (!inputStream)    {      return NULL;    }  inputStreamClass = (*env)->GetObjectClass (env, inputStream);  if (!inputStreamClass)    {      return NULL;    }  getDetectBuffer = (*env)->GetMethodID (env, inputStreamClass,                                         "getDetectBuffer", "()[B");  if (!getDetectBuffer)    {      return NULL;    }  detectBuffer = (*env)->CallObjectMethod (env, inputStream, getDetectBuffer);  if (!detectBuffer)    {      return NULL;    }  return xmljParseDocument (env, NULL, inputStream, detectBuffer,                            NULL, systemId, stylesheetURL,                            0, 0, 0, 0, 0, 0, 0, 0, 0, 2);}/* GnomeTransformer.newStylesheet */JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformer_newStylesheet (JNIEnv *env,                                                               jobject self){  xsltStylesheetPtr stylesheet;  jobject ret;  stylesheetURL = NULL;  xsltSetLoaderFunc (xmljDocLoader);  stylesheet = xsltNewStylesheet ();  xmljSetOutputProperties (env, self, stylesheet);  ret = xmljAsField (env, stylesheet);  if (ret == NULL)    {      xmljThrowException (env,                          "javax/xml/transform/TransformerConfigurationException",                          "Can't create Java object for stylesheet");    }  return ret;}/* GnomeTransformer.newStylesheetFromStream */JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformer_newStylesheetFromStream(JNIEnv *env, jobject self, jobject in, jbyteArray detectBuffer, jstring publicId, jstring systemId, jstring base, jboolean entityResolver, jboolean errorHandler){  xmlDocPtr doc;  xsltStylesheetPtr stylesheet;  jobject ret;  doc = xmljParseDocument (env, self, in, detectBuffer, publicId, systemId,                           base, 0, 0, 0, 0, 0,                            entityResolver, errorHandler, 0, 0, 2);  if (doc == NULL)    {      return NULL;    }  stylesheetURL = systemId;  xsltSetLoaderFunc (xmljDocLoader);  stylesheet = xsltParseStylesheetDoc (doc);  if (stylesheet == NULL)    {      xmljThrowException (env,                          "javax/xml/transform/TransformerConfigurationException",                          "Error parsing XSLT stylesheet");      return NULL;    }  xmljSetOutputProperties (env, self, stylesheet);  ret =  xmljAsField (env, stylesheet);  if (ret == NULL)    {      xmljThrowException (env,                          "javax/xml/transform/TransformerConfigurationException",                          "Can't create Java object for stylesheet");    }  return ret;}/* GnomeTransformer.newStylesheetFromDoc */JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformer_newStylesheetFromDoc(JNIEnv *env, jobject self, jobject in){  xmlDocPtr doc;  xsltStylesheetPtr stylesheet;  jobject ret;  doc = (xmlDocPtr) xmljGetNodeID (env, in);  if (doc == NULL)    {      return NULL;    }  stylesheetURL = xmljNewString (env, doc->URL);  xsltSetLoaderFunc (xmljDocLoader);  stylesheet = xsltParseStylesheetDoc (doc);  if (stylesheet == NULL)    {      xmljThrowException (env,                          "javax/xml/transform/TransformerConfigurationException",                          "Error parsing XSLT stylesheet");    }  xmljSetOutputProperties (env, self, stylesheet);  ret =  xmljAsField (env, stylesheet);  if (ret == NULL)    {      xmljThrowException (env,                          "javax/xml/transform/TransformerConfigurationException",                          "Can't create Java object for stylesheet");    }  return ret;}/* GnomeTransformer.transformStreamToStream */JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformer_transformStreamToStream(JNIEnv *env, jobject self, jobject in, jbyteArray detectBuffer, jstring publicId, jstring systemId, jstring base, jboolean entityResolver, jboolean errorHandler, jobject out){  xmlDocPtr source;  xmlDocPtr result;  source = xmljParseDocument (env, self, in, detectBuffer, publicId, systemId,                              base, 0, 0, 0, 0, 0,                               entityResolver, errorHandler, 0, 0, 2);  result = xmljTransform (env, self, source);  xmljSaveFileToJavaOutputStream (env, out, result,                                  (const char*) result->encoding);  xmlFreeDoc (result);}/* GnomeTransformer.transformStreamToDoc */JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformer_transformStreamToDoc(JNIEnv *env, jobject self, jobject in, jbyteArray detectBuffer, jstring publicId, jstring systemId, jstring base, jboolean entityResolver, jboolean errorHandler){  xmlDocPtr source;  xmlDocPtr result;  source = xmljParseDocument (env, self, in, detectBuffer, publicId, systemId,                              base, 0, 0, 0, 0, 0,                               entityResolver, errorHandler, 0, 0, 2);  result = xmljTransform (env, self, source);  return xmljGetNodeInstance (env, (xmlNodePtr) result);}/* GnomeTransformer.transformStreamToSAX */JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformer_transformStreamToSAX(JNIEnv *env, jobject self, jobject in, jbyteArray detectBuffer, jstring publicId, jstring systemId, jstring base, jboolean entityResolver, jboolean errorHandler, jobject callback){  xmlDocPtr source;  source = xmljParseDocument (env, self, in, detectBuffer, publicId, systemId,                              base, 0, 0, 0, 0, 0,                               entityResolver, errorHandler, 0, 0, 2);  xmljTransformToSAX (env, self, source, callback);}/* GnomeTransformer.transformDocToStream */JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformer_transformDocToStream(JNIEnv *env, jobject self, jobject doc, jobject out){  xmlDocPtr source;  xmlDocPtr result;  source = (xmlDocPtr) xmljGetNodeID (env, doc);  result = xmljTransform (env, self, source);  xmljSaveFileToJavaOutputStream (env, out, result,                                  (const char*) result->encoding);  xmlFreeDoc (result);}/* GnomeTransformer.transformDocToDoc */JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformer_transformDocToDoc(JNIEnv *env, jobject self, jobject doc){  xmlDocPtr source;  xmlDocPtr result;  source = (xmlDocPtr) xmljGetNodeID (env, doc);  result = xmljTransform (env, self, source);  return xmljGetNodeInstance (env, (xmlNodePtr) result);}/* GnomeTransformer.transformDocToSAX */JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformer_transformDocToSAX(JNIEnv *env, jobject self, jobject doc, jobject callback){  xmlDocPtr source;  source = (xmlDocPtr) xmljGetNodeID (env, doc);  xmljTransformToSAX (env, self, source, callback);}/* GnomeTransformer.free */JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformer_free (JNIEnv *env,                                                      jobject self){  xsltStylesheetPtr stylesheet;  stylesheet = xmljGetStylesheetID (env, self);  xsltFreeStylesheet (stylesheet);}/* * -------------------------------------------------------------------------- * Native implementation for class * gnu.xml.libxmlj.transform.GnomeTransformerFactory follows. *//* GnomeTransformerFactory.freeLibxsltGlobal */JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_transform_GnomeTransformerFactory_freeLibxsltGlobal (  JNIEnv *env __attribute__((__unused__)),  jclass clazz __attribute__((__unused__))){  xsltCleanupGlobals ();  xmlCleanupParser ();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -