我们有一个将xhtml文件转换为java对象的请求(我无法更改源以更改格式或类型)。这是关于地址的,如果同一个人在系统中有两个地址,则前三个标签可以为空。将此转换为java对象的最佳方法是什么? jaxb还是其他什么?你能简单介绍一下你是如何做到这一点的。
例如:
<table>
<tr>
<td>john</td>
<td>doe</td>
<td>1/1/09</td>
<td>cincinnati, OH</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td>Atlanta, GA</td>
</tr>
<tr>
<td>john1</td>
<td>doe1</td>
<td>1/1/89</td>
<td>cincinnati, OH</td>
</tr>
</table>
答案 0 :(得分:1)
以下是使用jSoup的方法:
import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class so15933614 {
public static void main(String[] args) throws IOException {
String url = "so15933614.html";
print("Fetching %s...", url);
Document doc = Jsoup.parse(new File(url), "UTF-8");
Elements rows = doc.select("tr");
for (Element row : rows) {
print("---------");
Elements data = row.getElementsByTag("td");
print("First Name:%s", data.get(0).text());
print("Last Name:%s", data.get(1).text());
print("Date:%s", data.get(2).text());
print("City:%s", data.get(3).text());
}
}
private static void print(String msg, Object... args) {
System.out.println(String.format(msg, args));
}
}
输出结果为:
Fetching so15933614.html...
---------
First Name:john
Last Name:doe
Date:1/1/09
City:cincinnati, OH
---------
First Name:
Last Name:
Date:
City:Atlanta, GA
---------
First Name:john1
Last Name:doe1
Date:1/1/89
City:cincinnati, OH
答案 1 :(得分:0)
注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。
您可以使用MOXy的@XmlPath
扩展程序按位置映射事物:
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
@XmlPath("td[1]/text()")
private String firstName;
@XmlPath("td[2]/text()")
private String lastName;
@XmlPath("td[3]/text()")
private String date;
@XmlPath("td[4]/text()")
private String city;
}
了解更多信息