我这个实例是在我开发过程中用到的,本人是菜鸟,希望高手勿喷!
首先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();
}
}
}
分享到:
相关推荐
接下来,我们将创建一个`SAXReader`实例,它是DOM4J中的解析器,用于读取XML文件: ```java SAXReader reader = new SAXReader(); ``` 然后,使用`reader`读取XML文件并获取`Document`对象,`Document`代表整个XML...
要使用DOM4J读取XML文档,首先需要创建一个`SAXReader`对象,然后调用`read`方法传入XML文件路径。这将返回一个`Document`对象,我们可以从中获取所有元素信息。 ```java File file = new File("path_to_xml_file")...
使用`DocumentFactory`创建一个`SAXReader`实例,然后用它读取XML文件到一个`Document`对象。 ```java DocumentFactory factory = DocumentFactory.getInstance(); SAXReader reader = new SAXReader(); File ...
在本示例中,我们将探讨如何利用DOM4J来读取和解析XML文件,以及如何通过`XMLTest.java`这个示例来理解DOM4J的基本用法。 首先,`XMLTest.java`是一个包含DOM4J操作XML的代码实例。通常,这样的程序会包含以下步骤...
综上所述,DOM4J、XPath和JUnit是Java XML处理和测试的重要工具,它们的结合使用可以帮助开发者高效、准确地处理XML数据并确保代码质量。在实际项目中,熟练掌握这些工具的使用将极大提升开发效率和代码的可维护性。
- DOM4J还支持XPath表达式,可以通过`XPathFactory`和`XPath`对象来选择XML节点。 在实际应用中,DOM4J通常优于本地DOM解析,因为它提供了更多的便利功能,如元素遍历、修改、查询等。同时,DOM4J对内存和CPU的...
**DOM4J解析XML实例详解** 在Java编程中,处理XML文档是一项常见的任务。DOM4J是一个非常流行的、强大的Java XML API,它提供了灵活且高效的方式来解析、创建、修改XML文档。本文将深入探讨如何使用DOM4J进行XML...
在这个实例中,我们将深入探讨如何利用DOM4J库来读取XML文件。 首先,我们需要了解DOM4J的基本概念。DOM4J使用Document Object Model (DOM) API,这是一种与平台和语言无关的标准,用于解析和操作XML文档。在DOM...
DOM4J作为一个解析器,可以将XML文档转换为一个可操作的Java对象模型,方便我们进行数据的读取和写入。 在`Dom4jTest1.java`中,程序通常会包含以下步骤: 1. 引入DOM4J库:首先,我们需要在Java源代码中引入DOM4J...
Jaxen使XPath查询在不同的XML解析器之间具有可移植性,因此即使在DOM4J中使用XPath,也可以通过Jaxen调用其他解析器的实现。 "W3CSchool.chm"文档是一个经典的在线编程学习资源,其中的XPath教程可能包含了XPath的...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。...通过深入学习和实践"xmldemo"这个实例,你可以更熟练地掌握DOM4J的使用,提升你的XML处理能力。
DOM4j的优势在于其灵活性和易用性,例如,它可以方便地通过XPath表达式进行查询,也可以通过Element和Attribute接口直接操作XML元素和属性。 在实际应用中,如果你需要频繁地进行XML操作,DOM4j通常会是更好的选择...
在处理XML时,我们通常会使用三种主要的解析方式:DOM(Document Object Model)、SAX(Simple API for XML)和XPath(XML Path Language)。下面将详细介绍这三种解析方法,并结合实例进行讲解。 1. DOM解析: DOM...
实例中,我们可以创建一个`DocumentBuilderFactory`对象,通过`newDocumentBuilder()`方法获取`DocumentBuilder`,然后使用`parse()`方法读取XML文件,得到`Document`对象。例如: ```java DocumentBuilderFactory ...
2. **读取XML文件**:使用`File`对象和`DocumentFactory`创建`Document`对象。例如: ```java File inputFile = new File("path_to_your_xml_file.xml"); DocumentFactory factory = DocumentFactory.getInstance();...
【使用dom4j解析XML】 dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、...通过学习和熟练掌握dom4j,开发者可以更轻松地处理XML数据,特别是在Java环境中,dom4j成为了一个不可或缺的工具。
2. **XML读取**:通过DOM4J,可以使用`DocumentBuilderFactory`和`DocumentBuilder`来创建一个解析器实例,然后读取XML文件。一旦XML文档被解析成`Document`对象,就可以通过`Element`、`Attribute`等接口遍历XML...
本实例主要介绍了如何使用DOM4J来创建XML文档,同时结合了JSP(JavaServer Pages)和JavaBean技术。以下是关于DOM4J创建XML以及与JSP、JavaBean结合使用的详细知识点: 1. DOM4J简介:DOM4J是一个开源的Java库,...
关于这些技术的实例,压缩包中的"XML"文件可能是用来演示如何使用DOM4J、SAX和DOM解析XML文档的代码示例。通过阅读和理解这些代码,你可以学习如何创建XML文档、解析XML元素、处理属性、遍历XML节点以及使用XPath...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储...结合“jar包执行20190331.rar”文件中的实例,开发者可以深入学习和实践DOM4J的使用,进一步提升XML处理能力。