`

编译xml中的脚本

    博客分类:
  • xml
阅读更多

xml文档的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<root>
	<name aa="sjs"/>
	<pass>sjs</pass>
	<script>
		<![CDATA[
			int a = 3;
			int b = 5;
			System.out.println("a+b= "+(a+b));
		]]>
	</script>
</root>
 

 

1.通过sax解析xml获取cdata中的脚本片段

package com.st.sax;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.Locator;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.DefaultHandler;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class SaxHelper  {
	
	class XMLParser extends DefaultHandler{
		//用于保存该xml文件中text值
	private StringBuffer buf;
	//用于保存临时元素的内容
	private String elementValue;
	//用于保存指定cdata元素的文本内容
	private String cdata = "";
	
	//在构造函数中初始化内容缓存
	public XMLParser() {
		super();
		buf = new StringBuffer();
		elementValue = "";
	}

	public void setDocumentLocator(Locator locator) {
		
	}

	public void startDocument() throws SAXException {
//		buf = new StringBuffer();
	}

	public void endDocument() throws SAXException {
	}

	public void startPrefixMapping(String prefix, String uri) {
	}

	public void endPrefixMapping(String prefix) {
	}

	public void processingInstruction(String target, String instruction)
			throws SAXException {
	}

	public void ignorableWhitespace(char[] chars, int start, int length)
			throws SAXException {
	}

	public void skippedEntity(String name) throws SAXException {
	}

	//一般在该方法中处理元素的属性
	public void startElement(String namespaceURI, String localName,
			String qName, Attributes atts) {
		if("script".equals(qName)){
			System.out.println("===================script node begin.");
		}
	}

	//一般在该方法中将用于保存临时元素值的变量清空,以便于保存下一个元素的内容
	public void endElement(String namespaceURI, String localName,
			String fullName) throws SAXException {
		if("name".equals(fullName)){
			elementValue = "";
		}
		if("pass".equals(fullName)){
			elementValue = "";
		}
		if("script".equals(fullName)){
			System.out.println("=====================script node end.");
			
			cdata = elementValue;
			elementValue = "";
		}
		
	}

	//处理元素的内容
	public void characters(char[] chars, int start, int length)
			throws SAXException {
		// 将元素内容累加到StringBuffer中
		buf.append(chars, start, length);
		/**
		 * 取text值需要使用临时变量,并在startElement和endElement中控制
		 */
		char[] aa = new char[length];
		System.arraycopy(chars, start, aa, 0, length);
		elementValue += new String(aa);
		System.out.println("elementValue= "+elementValue);
	}

	public String getCDATA(String node) {

		try {

			String path = "xml" +System.getProperty("file.separator")+"test.xml";
			SAXParserFactory sf = SAXParserFactory.newInstance();
			SAXParser sp = sf.newSAXParser();
			
			//如果此处的this 换成new XMLParser(),则方法后面的cdata无法取到,
			//主要是因为作用域的问题;因为该类的属性cdata无法取到(匿名类,无引用),
			//如果在try语句块中创建XMLParser sax = new XMLParser();也无法取到,原因作用域问题
			sp.parse(new InputSource(path), this);

		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		String value = cdata;
System.out.println("cdata="+cdata);
		return value;
	}
	
	
	}
	
	public String load(){
		XMLParser sax = new XMLParser();
		String aa = null;
		aa = sax.getCDATA("script");
		return aa;
		
	}
}
 

2.通过bsh工具解析脚本

 

package com.st.sax;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.Locator;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.DefaultHandler;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class SaxHelper  {
	
	class XMLParser extends DefaultHandler{
		//用于保存该xml文件中text值
	private StringBuffer buf;
	//用于保存临时元素的内容
	private String elementValue;
	//用于保存指定cdata元素的文本内容
	private String cdata = "";
	
	//在构造函数中初始化内容缓存
	public XMLParser() {
		super();
		buf = new StringBuffer();
		elementValue = "";
	}

	public void setDocumentLocator(Locator locator) {
		
	}

	public void startDocument() throws SAXException {
//		buf = new StringBuffer();
	}

	public void endDocument() throws SAXException {
	}

	public void startPrefixMapping(String prefix, String uri) {
	}

	public void endPrefixMapping(String prefix) {
	}

	public void processingInstruction(String target, String instruction)
			throws SAXException {
	}

	public void ignorableWhitespace(char[] chars, int start, int length)
			throws SAXException {
	}

	public void skippedEntity(String name) throws SAXException {
	}

	//一般在该方法中处理元素的属性
	public void startElement(String namespaceURI, String localName,
			String qName, Attributes atts) {
		if("script".equals(qName)){
			System.out.println("===================script node begin.");
		}
	}

	//一般在该方法中将用于保存临时元素值的变量清空,以便于保存下一个元素的内容
	public void endElement(String namespaceURI, String localName,
			String fullName) throws SAXException {
		if("name".equals(fullName)){
			elementValue = "";
		}
		if("pass".equals(fullName)){
			elementValue = "";
		}
		if("script".equals(fullName)){
			System.out.println("=====================script node end.");
			
			cdata = elementValue;
			elementValue = "";
		}
		
	}

	//处理元素的内容
	public void characters(char[] chars, int start, int length)
			throws SAXException {
		// 将元素内容累加到StringBuffer中
		buf.append(chars, start, length);
		/**
		 * 取text值需要使用临时变量,并在startElement和endElement中控制
		 */
		char[] aa = new char[length];
		System.arraycopy(chars, start, aa, 0, length);
		elementValue += new String(aa);
		System.out.println("elementValue= "+elementValue);
	}

	public String getCDATA(String node) {

		try {

			String path = "xml" +System.getProperty("file.separator")+"test.xml";
			SAXParserFactory sf = SAXParserFactory.newInstance();
			SAXParser sp = sf.newSAXParser();
			
			//如果此处的this 换成new XMLParser(),则方法后面的cdata无法取到,
			//主要是因为作用域的问题;因为该类的属性cdata无法取到(匿名类,无引用),
			//如果在try语句块中创建XMLParser sax = new XMLParser();也无法取到,原因作用域问题
			sp.parse(new InputSource(path), this);

		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		String value = cdata;
System.out.println("cdata="+cdata);
		return value;
	}
	
	
	}
	
	public String load(){
		XMLParser sax = new XMLParser();
		String aa = null;
		aa = sax.getCDATA("script");
		return aa;
		
	}
}

 输出结果:

cdata=
   
       
            int a = 3;
            int b = 5;
            System.out.println("a+b= "+(a+b));
       
   
a+b= 8

分享到:
评论
2 楼 mofeichen 2010-08-13  
dododz 写道
为什么是jar 而不是源码阿


这个是xml脚本使用的simple,所以只贴了源码
1 楼 dododz 2010-08-10  
为什么是jar 而不是源码阿

相关推荐

    反编译XML文件

    总之,反编译XML文件是一项涉及多个工具和技术的过程,旨在从二进制或加密格式中恢复结构化数据。对于APK文件,这一过程可以帮助我们理解和操作Android应用的关键组成部分。通过使用如Apktool这样的工具,我们可以...

    android一键反编译工具,xml反编译工具

    标题和描述提到的“android一键反编译工具,xml反编译工具”就是用于此目的的专业软件。下面将详细阐述相关知识点: 1. 反编译概念: 反编译是将已编译的二进制代码转换回源代码的过程,通常用于理解程序的工作原理...

    APK一键反编译工具,包括XML,CLASS

    标题中的“APK一键反编译工具,包括XML,CLASS”指的是一个专为简化APK应用反编译过程而设计的工具。APK是Android应用程序的包格式,它包含了应用程序的所有资源、代码和元数据。通常,APK的源代码是加密的,但通过反...

    ant脚本编译jar

    在上面的脚本中,`default="jar"`表示默认执行`jar`目标,`depends="compile"`表示`jar`目标依赖于`compile`目标,意味着在创建`JAR`之前,必须先编译源代码。`&lt;mkdir&gt;`任务用于创建目录,`&lt;javac&gt;`任务用于编译Java...

    小程序反编译脚本2.zip

    压缩包中的文件名显示,它可能包含了几个图片文件(可能是反编译过程中的截图或步骤说明)以及一个名为"小程序反编译脚本.zip"的子压缩包,里面很可能封装了实际的反编译脚本。 反编译小程序通常涉及以下几个关键...

    apktool_xml反编译工具

    3. 反编译完成后,可以在解压目录下的`res`和`AndroidManifest.xml`中查看和编辑资源和配置。 **注意事项** - 反编译可能涉及版权和法律问题,因此在进行反编译时应确保你拥有合法的权限,或者仅用于学习和研究...

    mybits生成数据库实体mapper和xml脚本可以直接运行

    标题 "mybits生成数据库实体mapper和xml脚本可以直接运行" 提到的是一个工具或方法,它简化了MyBatis框架中数据库实体类、Mapper接口和XML配置文件的生成过程。MyBatis是一个流行的Java持久层框架,它允许开发者将...

    XML格式脚本文件解析器源代码

    XML格式的脚本文件解析器是理解并处理这些文件的关键工具。本篇文章将深入探讨XML解析器的基本概念、XML的结构以及VC++环境下实现XML解析器的相关技术。 XML的基本结构: XML文档由元素(Element)、属性...

    服务器 使用脚本打包编译java项目

    3. **构建过程**:执行`build.sh`脚本,这个脚本调用Ant的`build.xml`来编译源代码,执行单元测试,并生成可部署的JAR或WAR包。 4. **服务器管理**:使用`startserver.sh`和`server.sh`脚本来启动、停止或重启...

    Android反编译、回编译工具脚本

    在Android应用开发中,有时我们需要对已有的APK文件进行逆向工程,即反编译,以便查看其源代码、资源文件或者进行二次修改。"Android反编译、回编译工具脚本"是一个用于此类操作的工具集合,特别适合高版本的Android...

    tolua集成风云pbc的编译脚本和win下编译出的dll

    这样,游戏逻辑或应用程序的复杂逻辑可以写在易于维护和扩展的Lua脚本中,而底层性能敏感的部分则由C++实现,达到性能和灵活性的平衡。 总的来说,tolua集成风云pbc提供了在Windows平台上高效地使用Lua和C++交互的...

    apk反编译工具,脚本以及jar包

    本文将深入探讨"apk反编译工具",特别是"apktool"及其相关的jar包和脚本。 首先,我们来了解apktool。Apktool是由IzzySoft开发的一款开源工具,主要用于反编译和重新打包Android APK文件。它能够解码Dex文件...

    android反编译脚本(unix like版本)

    在Android应用开发中,为了保护源代码的安全,开发者通常会将代码编译成APK文件。然而,有时候出于调试、学习或逆向工程的目的,我们需要对APK进行反编译。这个“android反编译脚本(unix like版本)”正是针对Linux...

    自动编译脚本编写指南.docx

    自动编译脚本编写指南 本文档旨在提供自动编译脚本编写指南,以便配置管理员、项目经理和需要实施自动编译的相关人员进行参考和借鉴。下面将详细解释自动编译脚本编写指南的内容。 一、“简单编译”对象 “简单...

    网络游戏-基于XML脚本的网络设备管理软件客户端模拟方法.zip

    在网络游戏中,XML脚本的应用能够为网络设备管理软件客户端提供灵活且高效的数据管理和交互方式。下面我们将深入探讨这一主题。 一、XML脚本的基础 XML是一种结构化的数据表示语言,其设计目标是传输和存储数据,...

    java编译脚本实例及讲解

    在 `build_for_ejb_templet.xml` 示例中,它详细定义了如何初始化项目、设置路径、编译 EJB 和 Web 模块,以及部署到 JBoss 服务器的流程。此外,还涉及了使用 `&lt;property&gt;` 标签定义和引用属性,以及 `&lt;path&gt;` 标签...

    APK.xml.dex反编译工具包v1.6.exe

    在编译与反编译中,可能会出现编译 与反编译失败,原因在于缺少框架的支持。需要使用装载框架脚 本载入framework-res.apk和SystemUI.apk。 更新: -----------------------------------------------------------...

    LuaXml工具

    7. **LuaXml.lua**:这可能是一个示例脚本或测试文件,展示了如何在Lua中导入和使用LuaXML库,是学习和理解库用法的好起点。 8. **LuaXml.png**:可能是一个图标或者示意图,有助于理解LuaXML的工作原理或数据结构...

    自动编译脚本编写指南 (2).docx

    自动编译脚本编写指南是指在软件开发过程中,使用脚本语言来自动完成编译工作的指南。该指南旨在帮助配置管理员、项目经理以及需要实施自动编译的相关人员,提高编译效率和质量。 一、“简单编译”对象 所谓“简单...

    自动编译脚本编写指南 (2).pdf

    自动编译脚本编写指南是配置管理员、项目经理以及需要实施自动编译的相关人员的参考和借鉴指南,本文档收集了常见开发语言的编译脚本,并提供了简单编译和复杂编译两种对象的编写思路。 一、简单编译对象 简单编译...

Global site tag (gtag.js) - Google Analytics