`
h5566h
  • 浏览: 74512 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

使用dom4j 和xpath 通过url读取xml数据的实例

阅读更多

我这个实例是在我开发过程中用到的,本人是菜鸟,希望高手勿喷!

首先dom4j 需要在项目中添加一些包,另外调用xpath 也需要一些包,然后我这里就不多说了,直接说一下我这个代码的具体思路:

1、根据一定的规则,创建读取xml的url (由于我这个代码是根据用户不同的选择读取不同的xml)

2、检查url的合法性,主要是看url是否是有效链接

3、创建saxReader实例,接着创建doc实例

4、通过xpath中的selectNodes读取出数据,(其实这个是dom4j的一个方法,主要需要xpath的支持)

5、打包数据,挂在arraylist中,最后写入数据库

代码如下:

public class ParseXML {
	private ImportNameForm dataform;
	private int type;
	private Academic ac;
	private int count = 0; // 返回文章的数量
	private StringBuffer finalStrBuffer = new StringBuffer();
	ArrayList<Academic> ar = new ArrayList<Academic>();

	// 把年份和账号通过构造函数传过来
	public ParseXML(ImportNameForm dataform, int type) {
		this.dataform = dataform;
		this.type = type;

	}

	// 返回文章的数量
	public int getCount() {
		return count;
	}

	public ArrayList<Academic> xml2arraylist() {
		this.parsing(1);
		return ar;
	}

	public String xml2string() {
		this.parsing(2);
		return finalStrBuffer.toString();
	}

	// 根据地址在xml中把数据读出,当flag等于1,把数据放在academic中,然后再放在arraylist中
	// 当flag=2 把数据转化成html放在buffer中
	//flag等于1是为了方便存储,flag等于2是为了在选择名字后的显示

	public void parsing(int flag) {
		switch (type) {
		case 1:
			this.getPaperXML(flag);
			break;
		case 2:
			this.getPublicationXML(flag);
			break;
		case 3:
			this.getProjectXML(flag);			
			break;
		case 4:
			this.getPatentXML(flag);
			break;
		}
	}

	public String xzmTemplate(int i) {
		String str;
		String[] xzm = dataform.getXzm();
		str = "<tr><td bgcolor='#dddddd'>学者:";
		str = str + xzm[i] + " 的相关信息</td></tr>";
		return str;
	}

	public String checkboxTemplate(Academic ac) {
		String str;
		str = "<tr><td><input type='checkbox' name='ckb' value='";
		str = str + ac.getId() + "'/>";
		str = str + ac.getTitle() + "</td></tr>";
		return str;
	}

	// 根据用户的账号和选择的年份生成URL
	public String[] createURL() {		
		String year1 = dataform.getYear1();
		String year2 = dataform.getYear2();
		String[] ckb = dataform.getCkb();
		String[] str = new String[ckb.length];
		String strType;
		switch (type) {
		case 1:
			strType = "Paper";
			break;
		case 2:
			strType = "Publication";
			break;
		case 3:
			strType = "Project";			
			break;
		case 4:
			strType = "Patent";
			break;
		default:
			strType = "Paper";
			break;
		}
		for (int i = 0; i < ckb.length; i++) {
			str[i] = "http://www.XXXXXX.com/rest/";
			str[i] = str[i] + strType + "/" + ckb[i].trim() + "/" + year1 + "-"
					+ year2;
		}
		return str;
	}

	// 检查URL是否有效
	private boolean isConnect(String url) {
		boolean flag = false;
		int counts = 0;
		if (url == null || url.length() <= 0) {
			return flag;
		}
		while (counts < 5) {
			try {
				HttpURLConnection connection = (HttpURLConnection) new URL(url)
						.openConnection();
				int state = connection.getResponseCode();
				if (state == 200) {

					flag = true;
				}
				break;
			} catch (Exception ex) {
				counts++;
				continue;
			}
		}
		return flag;
	}

	public void getPaperXML(int flag) {
		System.out.println("Paper_parsing");
		String[] strURL = this.createURL();
		SAXReader saxReader = new SAXReader();
		try {
			for (int i = 0; i < strURL.length; i++) {
				if (isConnect(strURL[i])) {
					URL url;
					url = new URL(strURL[i]);
					Document doc = saxReader.read(url);
					List paperids = doc
							.selectNodes("/scholarPapers/scholarPaper/id");
					List titles = doc
							.selectNodes("/scholarPapers/scholarPaper/title");
					List authors = doc
							.selectNodes("/scholarPapers/scholarPaper/authors");
					List dates = doc
							.selectNodes("/scholarPapers/scholarPaper/date");
					List sources = doc
							.selectNodes("/scholarPapers/scholarPaper/source");
					List types = doc
							.selectNodes("/scholarPapers/scholarPaper/type");
					List citations = doc.selectNodes("/scholarPapers/scholarPaper/citation");
					if (flag == 2) {
						finalStrBuffer.append(xzmTemplate(i));
					}
					for (int j = 0; j < paperids.size(); j++) {
						count++;
						ac = new Academic();
						ac.setAcademic_class(String.valueOf(type));
						ac.setAuthor(((Element) authors.get(j)).getText());
						ac.setPaper(((Element) sources.get(j)).getText());
						ac.setPtype(((Element) types.get(j)).getText());
						ac.setTitle(((Element) titles.get(j)).getText());
						ac.setId(Integer.parseInt(((Element) paperids.get(j))
								.getText()));
						ac.setYear(Integer.parseInt(((Element) dates.get(j))
								.getText().substring(0, 4)));
						ac.setContent(((Element)citations.get(j)).getText());

						if (flag == 1) {
							ar.add(ac);
						} else
							finalStrBuffer.append(checkboxTemplate(ac));

					}
				}
			}
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

分享到:
评论

相关推荐

    PHP使用xpath解析XML的方法详解

    XML文件在PHP网站开发的轻量级应用中使用非常广泛,而PHP解析和读取XML文件的方式有很多种,比如JS DOM、SimpleXml、Xpath等方式解析XML文件,今天来讲讲在PHP中使用Xpath解析XML的实例,同时通过Xpath解析XML的实例...

    eulxml:使用XPath将XML数据映射到Python对象和Django表单的实用程序

    eulxml 包裹 文件资料 代码 eulxml是... eulxml.forms提供了Django Form对象,这些对象使用eulxml.xmlmap.XmlObject实例作为表单的基础和数据实例,目的是简化通过Web表单编辑XML内容的目的。依存关系eulxml依赖于和 。

    JDOM(java)使用详解及实例

    org.jdom.input 包含了读取xml文档的类 org.jdom.output 包含了写入xml文档的类 org.jdom.transform 包含了将jdom xml文档接口转换为其他xml文档接口 org.jdom.xpath 包含了对xml文档xpath操作的类三、...

    C#XML入门经典 C#编程人员必备的XML技能.part2

    在.NET中读取XML &lt;br&gt;4.1 流模型 4.1.1 流模型和DOM的比较 4.1.2 流模型中的变体 4.2 XmlTextReader类 4.2.1 XmlTextReader属性 4.2.2 读取属性 4.2.3 读取较大的数据块 4.3 XmlNodeReader...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    我的理解是它满足了网络共享和数据交互,使用DTD最大的好处在于DTD文件的共享。(就是上文DTD说明语句中的PUBLIC属性)。比如,两个相同行业不同地区的人使用同一个DTD文件来作为文档创建规范,那么他们的数据就很容易...

    php读取xml实例代码

    php class xpathExtension{ public static function getNodes($domDoc, $xpathString) { $xp = new DOMXPath($domDoc); $xp-&gt;registerNamespace(‘x’, ‘http://www.w3.org/1999/xhtml’); $xp-&gt;registerNamespace...

    javascript完全学习手册2 源码

    9.2.4 XMLDOM实例 9.3 XPath 9.3.1 XPath概述 9.3.2 IE中的XPath支持 9.3.3 Mozilla中的XPath支持 9.4 XSLT 9.4.1 XSLT概述 9.4.2 IE中的XSLT支持 9.4.3 MozilIa中XSLT支持 9.5 数据岛技术 第10章...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    14.3.2 读取XML文件 14.4 内存中的XML处理 14.4.1 XmlDocument 14.4.2 XPathNavigator 14.4.3 XDocument 14.5 搜索XML内容 14.5.1 搜索XmlDocument 14.5.2 使用XPath搜索XmlDocument 14.5.3 使用...

    javascript完全学习手册1 源码

    9.2.4 XML DOM实例 241 9.3 XPath 247 9.3.1 XPath概述 247 9.3.2 IE中的XPath支持 249 9.3.3 Mozilla中的XPath支持 249 9.4 XSLT 254 9.4.1 XSLT概述 254 9.4.2 IE中的XSLT支持 256 9.4.3 Mozilla中XSLT支持 259 ...

    ASP.NET4高级程序设计(第4版) 3/3

    14.3.2 读取XML文件 478 14.4 内存中的XML处理 481 14.4.1 XmlDocument 482 14.4.2 XPathNavigator 485 14.4.3 XDocument 486 14.5 搜索XML内容 491 14.5.1 搜索XmlDocument 491 14.5.2 使用XPath...

Global site tag (gtag.js) - Google Analytics