1

我们有一个将 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>
4

2 回答 2

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
于 2013-04-10T18:45:44.667 回答
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;

}

了解更多信息

于 2013-04-10T19:45:59.400 回答