`
h5566h
  • 浏览: 74931 次
  • 性别: 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();
		}
	}
}

 

分享到:
评论

相关推荐

    dom4j 解析(读取) xml 节点数据

    接下来,我们将创建一个`SAXReader`实例,它是DOM4J中的解析器,用于读取XML文件: ```java SAXReader reader = new SAXReader(); ``` 然后,使用`reader`读取XML文件并获取`Document`对象,`Document`代表整个XML...

    dom4j读写xml文档实例

    要使用DOM4J读取XML文档,首先需要创建一个`SAXReader`对象,然后调用`read`方法传入XML文件路径。这将返回一个`Document`对象,我们可以从中获取所有元素信息。 ```java File file = new File("path_to_xml_file")...

    dom4j读取XML,解析XML简单示例

    在本示例中,我们将探讨如何利用DOM4J来读取和解析XML文件,以及如何通过`XMLTest.java`这个示例来理解DOM4J的基本用法。 首先,`XMLTest.java`是一个包含DOM4J操作XML的代码实例。通常,这样的程序会包含以下步骤...

    dom4j_xpath_junitTest.zip

    综上所述,DOM4J、XPath和JUnit是Java XML处理和测试的重要工具,它们的结合使用可以帮助开发者高效、准确地处理XML数据并确保代码质量。在实际项目中,熟练掌握这些工具的使用将极大提升开发效率和代码的可维护性。

    使用dom4j 和本地dom 解析xml 文件

    - DOM4J还支持XPath表达式,可以通过`XPathFactory`和`XPath`对象来选择XML节点。 在实际应用中,DOM4J通常优于本地DOM解析,因为它提供了更多的便利功能,如元素遍历、修改、查询等。同时,DOM4J对内存和CPU的...

    dom4j解析xml实例

    **DOM4J解析XML实例详解** 在Java编程中,处理XML文档是一项常见的任务。DOM4J是一个非常流行的、强大的Java XML API,它提供了灵活且高效的方式来解析、创建、修改XML文档。本文将深入探讨如何使用DOM4J进行XML...

    利用DOM4J读取XML的实例

    在这个实例中,我们将深入探讨如何利用DOM4J库来读取XML文件。 首先,我们需要了解DOM4J的基本概念。DOM4J使用Document Object Model (DOM) API,这是一种与平台和语言无关的标准,用于解析和操作XML文档。在DOM...

    dom4j 解析xml实例

    DOM4J作为一个解析器,可以将XML文档转换为一个可操作的Java对象模型,方便我们进行数据的读取和写入。 在`Dom4jTest1.java`中,程序通常会包含以下步骤: 1. 引入DOM4J库:首先,我们需要在Java源代码中引入DOM4J...

    DOM4J jar包和W3CSchool.chm的文档包含XPath的教程

    Jaxen使XPath查询在不同的XML解析器之间具有可移植性,因此即使在DOM4J中使用XPath,也可以通过Jaxen调用其他解析器的实现。 "W3CSchool.chm"文档是一个经典的在线编程学习资源,其中的XPath教程可能包含了XPath的...

    利用dom4j读写xml实例xmldemo

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。...通过深入学习和实践"xmldemo"这个实例,你可以更熟练地掌握DOM4J的使用,提升你的XML处理能力。

    分别使用DOM和DOM4j解析XML文件

    DOM4j的优势在于其灵活性和易用性,例如,它可以方便地通过XPath表达式进行查询,也可以通过Element和Attribute接口直接操作XML元素和属性。 在实际应用中,如果你需要频繁地进行XML操作,DOM4j通常会是更好的选择...

    Dom,Sax,Xpath解析XML实例

    在处理XML时,我们通常会使用三种主要的解析方式:DOM(Document Object Model)、SAX(Simple API for XML)和XPath(XML Path Language)。下面将详细介绍这三种解析方法,并结合实例进行讲解。 1. DOM解析: DOM...

    dom,dom4j,sax 解析xml文件实例

    实例中,我们可以创建一个`DocumentBuilderFactory`对象,通过`newDocumentBuilder()`方法获取`DocumentBuilder`,然后使用`parse()`方法读取XML文件,得到`Document`对象。例如: ```java DocumentBuilderFactory ...

    Dom4j解析配置文件与xml小例子

    2. **读取XML文件**:使用`File`对象和`DocumentFactory`创建`Document`对象。例如: ```java File inputFile = new File("path_to_your_xml_file.xml"); DocumentFactory factory = DocumentFactory.getInstance();...

    dom4j 读取带有命名空间的xml文件

    使用`DocumentFactory`创建一个`SAXReader`实例,然后用它读取XML文件到一个`Document`对象。 ```java DocumentFactory factory = DocumentFactory.getInstance(); SAXReader reader = new SAXReader(); File ...

    使用dom4j解析XML

    【使用dom4j解析XML】 dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、...通过学习和熟练掌握dom4j,开发者可以更轻松地处理XML数据,特别是在Java环境中,dom4j成为了一个不可或缺的工具。

    dom4j_XML.rar_DOM4J_dom4j xml java_java xml_读写xml

    2. **XML读取**:通过DOM4J,可以使用`DocumentBuilderFactory`和`DocumentBuilder`来创建一个解析器实例,然后读取XML文件。一旦XML文档被解析成`Document`对象,就可以通过`Element`、`Attribute`等接口遍历XML...

    DOM4J创建XML是一个实例

    本实例主要介绍了如何使用DOM4J来创建XML文档,同时结合了JSP(JavaServer Pages)和JavaBean技术。以下是关于DOM4J创建XML以及与JSP、JavaBean结合使用的详细知识点: 1. DOM4J简介:DOM4J是一个开源的Java库,...

    DOM4J_SAX_DOM_XML的实例

    关于这些技术的实例,压缩包中的"XML"文件可能是用来演示如何使用DOM4J、SAX和DOM解析XML文档的代码示例。通过阅读和理解这些代码,你可以学习如何创建XML文档、解析XML元素、处理属性、遍历XML节点以及使用XPath...

    xmldom4j解析

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储...结合“jar包执行20190331.rar”文件中的实例,开发者可以深入学习和实践DOM4J的使用,进一步提升XML处理能力。

Global site tag (gtag.js) - Google Analytics