`
酷的飞上天空
  • 浏览: 521808 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

BlogContext和简单xml解析器

阅读更多

因为只需要获取、设置、保存这三个功能,所有写了如下接口

 

XmlHandle内容

public interface XmlHandle {

	public String getValueOfTagName(String tagName);
	public void setValueOfTagName(String tagName,String value);
	public void saveXml();
}

 

实现类SimpleXmlHandle如下

public class SimpleXmlHandle implements XmlHandle {

	Document document;
	String xmlFilePath;
	public SimpleXmlHandle(String xmlFilePath){
		this.xmlFilePath = xmlFilePath;
		init();
	}
	private void init(){
		try {
			document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFilePath);
		} catch (Exception e) {
			LogUtil.error(this.getClass().getName(), "解析blog.xml文件失败!");
			throw new RuntimeException(e);
		}
	}
	@Override
	public String getValueOfTagName(String tagName) {
		//根据标签的名称取得标签,一个list
		NodeList nodeList = document.getElementsByTagName(tagName);
		//如果找不到相应标签,则返回null
		if(nodeList.getLength()==0) return null;
		//返回取得的标签列表的第一个标签(即重复定义标签时,只有第一个有效),最后再返回该标签的第一个文本节点。
		Node node = nodeList.item(0).getFirstChild();
		//返回去掉首位空格的文本节点的值,。
		return node.getNodeValue().trim();
	}
	@Override
	public void setValueOfTagName(String tagName, String value) {
		NodeList nodeList = document.getElementsByTagName(tagName);
		Node node = nodeList.item(0).getFirstChild();
		node.setNodeValue(value);
	}
	public void saveXml(){
		try {
			Transformer transformer = TransformerFactory.newInstance().newTransformer();
			transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, document.getDoctype().getSystemId());
			StreamResult streamResult = new StreamResult(new File(xmlFilePath));
			DOMSource source = new DOMSource(document);
			transformer.transform(source, streamResult);
		} catch (Exception e) {
			throw new RuntimeException(e);			
		}
	} 

}

 

从构造方法里面获得xml的路径,调用init(),方法进行xml文件的解析(使用dom方式)。得到解析好的xml文件的dom树

getValueOfTagName方法根据传递进来的字符串,查找对应的名标签的值。具体方法注释都有

setValueOfTagName方法与get方法相似。

transformer 则用于把当前的dom树转换为xml文档

 

BlogContext内容如下

public class BlogContext {
	/**
	 * 代表文章的分类标志
	 */
	public static final int ARTICLE_MARK = 0;
	/**
	 * 代表图片的分类标志
	 */
	public static final int PHOTOS_MARK = 1;
	
	private User user;
	private String databaseUrl;
	private String databaseUser;
	private String databasePassWord;
	private XmlHandle xmlHandle;
	public void init(){
		if(xmlHandle==null)
			throw new RuntimeException("xmlHandle不能为空!");
		user = new User();
		user.setBlogTitle(xmlHandle.getValueOfTagName("blogTitle"));
		user.setAboutMe(xmlHandle.getValueOfTagName("aboutMe"));
		user.setDegree(xmlHandle.getValueOfTagName("degree"));
		user.setFindMe(xmlHandle.getValueOfTagName("findMe"));
		user.setHeadImg(xmlHandle.getValueOfTagName("headImg"));
		user.setHobby(xmlHandle.getValueOfTagName("hobby"));
		user.setHome(xmlHandle.getValueOfTagName("home"));
		user.setiWantSay(xmlHandle.getValueOfTagName("iWantSay"));
		user.setLoginPassWord(xmlHandle.getValueOfTagName("loginPassWord"));
		user.setNickName(xmlHandle.getValueOfTagName("nickName"));
		user.setNowAddress(xmlHandle.getValueOfTagName("nowAddress"));
		user.setSex(xmlHandle.getValueOfTagName("sex"));
		String yearNum = xmlHandle.getValueOfTagName("year");
		Integer year = null;
		year = Integer.parseInt(yearNum);
		user.setYear(year);
		user.setLastLogin(xmlHandle.getValueOfTagName("lastLogin"));
		this.databaseUrl = xmlHandle.getValueOfTagName("url");
		this.databaseUser = xmlHandle.getValueOfTagName("user");
		this.databasePassWord = xmlHandle.getValueOfTagName("password");
	}
	public void destroyed(){
		xmlHandle.setValueOfTagName("aboutMe", user.getAboutMe());
		xmlHandle.setValueOfTagName("degree", user.getDegree());
		xmlHandle.setValueOfTagName("findMe", user.getFindMe());
		xmlHandle.setValueOfTagName("headImg", user.getHeadImg());
		xmlHandle.setValueOfTagName("hobby", user.getHobby());
		xmlHandle.setValueOfTagName("home", user.getHome());
		xmlHandle.setValueOfTagName("iWantSay", user.getiWantSay());
		xmlHandle.setValueOfTagName("loginPassWord", user.getLoginPassWord());
		xmlHandle.setValueOfTagName("nickName", user.getNickName());
		xmlHandle.setValueOfTagName("nowAddress", user.getNowAddress());
		xmlHandle.setValueOfTagName("sex", user.getSex());
		xmlHandle.setValueOfTagName("year", user.getYear().toString());
		xmlHandle.setValueOfTagName("lastLogin", user.getLastLogin());
		xmlHandle.setValueOfTagName("blogTitle", user.getBlogTitle());
		xmlHandle.saveXml();
	}
               //get,set略
           	public static BlogContext getInstance(){
		return BlogFilter.getBlogContext();
	}
}

 前两个字段是因为文章和相册公用同一张表,所以设置一个辨别的标志

  init方法用于从解析的xml中取得数据并给user设置值,以及取得连接数据库的必须信息。jdbc4不需要指定drverClass,所以这里没有。此方法在AbstractFilter的init方法被调用执行。

destroyed用于把已经更改或未更改的用户信息,设置回dom树。并把更改好的dom树保存到xml文件中。此方法在AbstractFilter的destroy方法被调用

getInstance则用于提供一个获取User的方式,也可在servlet直接使用BlogFilter.getBlogContext();调用

 

分享到:
评论

相关推荐

    XML解析器示例

    在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)这个强大的图形化编程环境中,XML解析器是处理和操作XML数据的关键工具。本示例主要展示了如何在LabVIEW中实现XML文件的加载、保存和解析。 首先...

    简易XML解析器

    简易XML解析器是针对XML文档进行读取、解析和操作的工具,通常用于处理XML数据并将其转换为程序可理解的形式。 在提供的文件中,我们可以看到以下几个关键组成部分: 1. **xCfgParser.cpp**:这是解析器的主要实现...

    XML解析器下载JAR包

    标签"XML解析器"和"下载JAR包"进一步明确了这个资源的关键信息,即这是一个与XML解析相关的Java库,并且是以可下载的JAR形式提供的。 在压缩包子文件的文件名称列表中提到了"xml解析器jdom的jar包",这意味着包含的...

    XML解析器,用于解析XML文件

    XML解析器有两种主要类型:DOM(Document Object Model)解析器和SAX(Simple API for XML)解析器。 1. DOM解析器:DOM解析器会将整个XML文档加载到内存中,创建一个树形结构,允许开发者通过节点来访问和修改XML...

    xml解析器的源代码

    根据解析方式,XML解析器主要分为两种类型:DOM(Document Object Model)解析器和SAX(Simple API for XML)解析器。 1. DOM解析器:DOM解析器将整个XML文档加载到内存中,创建一个树形结构,允许开发者通过节点...

    expatxml解析器.pdf

    这些内容展示了如何在C语言环境下使用Expat解析器来处理XML文件,包括解析过程中的内存管理和节点访问。 注意,由于文档内容是OCR扫描的结果,某些字符可能存在错误,需要结合上下文来推断正确含义。但总体而言,...

    XML解析器————

    1. **DOM解析器**:Document Object Model (DOM) 提供了一种结构化的表示XML文档的方式,允许程序员通过树形结构访问和操作XML元素。Xerces-J的DOM解析器将整个XML文档加载到内存中,方便进行遍历和修改。 2. **SAX...

    (第十章)一个xml解析器和构造器

    例如,可以先使用SAX解析器解析XML文件,然后利用DOM或SAX构造器将处理后的数据写回XML。 了解了基本概念后,我们可以进一步探讨一些高级话题,如XPath和XSLT: 1. XPath:这是一种在XML文档中查找信息的语言。...

    xml_分析器.zip_XML VC_XML 解析_XML解析_vc解析xml_xml解析器

    本项目是一个在Visual C++(VC)环境下开发的简单XML解析器,主要关注于理解和处理XML文档的内容。 XML解析是理解XML文档结构并从中提取数据的关键步骤。在这个VC项目中,XML解析器实现了对XML文档的基本解析功能,...

    XML解析器-简单工厂模式.doc

    《XML解析器与简单工厂模式》 XML(eXtensible Markup Language)是一种标记语言,广泛用于数据交换、配置文件存储等场景。在Java中,处理XML文档时,我们通常会使用解析器,其中SAX(Simple API for XML)解析器是...

    c++实现的简单xml解析器

    这是一个用c++实现的简单的xml的解析器

    易语言 xml解析 易语言 xml解析 教程 带源码

    4. **SAX解析**:与DOM不同,SAX解析器不将整个XML文档加载到内存,而是通过事件回调函数处理每个元素的开始和结束、处理属性等。在易语言中,我们需要定义一系列的事件处理函数,如`开始文档`、`结束文档`、`开始...

    XML解析器c++实现代码

    在C++中实现XML解析器是一项技术挑战,但通过合理的封装和设计,可以创建一个高效且易用的接口来处理XML文件。 XML文件结构由元素(Element)、属性(Attribute)、文本内容(Text Content)以及一系列的语法规则...

    XML解析器安装包

    在Windows环境下,XML解析器是处理和解析XML文档所必需的组件。本文将详细讲解如何安装“XML解析器安装包”,以及在MFC(Microsoft Foundation Classes)中如何利用它来调用IXMLDOMDocumentPtr类的函数。 首先,...

    XML解析工具

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解析库,能够用于C++,...

    xml解析器,打包解析XML

    本压缩包提供了一套XML解析器的源代码,旨在帮助开发者理解和实现XML的解析过程。 在"xml.cpp"和"xdb.cpp"文件中,我们可以找到XML解析器的核心实现。这些源代码通常包含了读取XML文档,解析元素、属性、文本节点,...

    xml-binding XML解析器

    总之,"xml-binding XML解析器"是C++开发者处理XML数据的一种强大工具,它基于成熟的XML_Parser库并提供了C++的友好接口,使XML解析变得更加简单和高效。通过深入理解和应用这个库,开发者可以更好地驾驭XML数据,...

    js的XML解析器 可以解析XMl文件和XML字符串

    - **XML解析器**:解析器负责将XML文档转换为可操作的数据结构,如DOM(Document Object Model)树,以便JavaScript代码可以访问和操作。 2. **JavaScript中的XML解析** - **DOM解析**:JavaScript中最常见的XML...

    XML解析和生成工具

    `Markup.cpp`和`Markup.h`可能实现了一个简单的XML解析器或生成器。在C++中,可以使用这些文件创建自定义的解析器,处理XML数据。通常,解析器会提供以下功能: - 解析XML文档,生成元素对象。 - 处理元素的属性和...

Global site tag (gtag.js) - Google Analytics