Java 如何使用jaxb在xml文件中创建表?

Java 如何使用jaxb在xml文件中创建表?,java,jaxb,Java,Jaxb,我是JAXB的新手。我曾尝试使用JAXB在xml文件中创建表格式。但它无法按预期工作 预期产出 <root> <table border="1" width="100%"> <thead> <tr><th>personalDetails</th><th>Date</th><th>Status</th><

我是JAXB的新手。我曾尝试使用JAXB在xml文件中创建表格式。但它无法按预期工作

预期产出

<root>
        <table border="1" width="100%">
            <thead>
                <tr><th>personalDetails</th><th>Date</th><th>Status</th></tr>
            </thead>
            <tbody>
                <tr><td>Ricky,anderson</td><td>Nov 1999</td><td>working</td></tr>
                <tr><td>Mackey,manson</td><td>Nov 1979</td><td>completed</td></tr>
                <tr><td>Corney,Richson</td><td>Nov 1989</td><td>pending</td></tr>   
            </tbody>
        </table>
</root>
根元素类。我也在这个类中奋斗

@XmlRootElement(name = "text")
public class RootTable {

    Table table;

    public Table getTable() {
        return table;
    }

    public void setTable(Table table) {
        this.table = table;
    }
主类

public class Test {

    public static void main(String[] args) throws JAXBException {

        Table table = new Table();
        table.setThread("<tr><th>personalDetails</th><th>Date</th><th>Status</th></tr>");
        table.setWidth("15");
        table.setBorder("100");
        table.setTbody("<tr><td>Ricky,anderson</td><td>Nov 1999</td>td>working</td></tr>");
        RootTable too = new RootTable();
        too.setTable(table);
            JAXBContext jaxbContext = JAXBContext.newInstance(RootTable.class);
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

    // output pretty printed
    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

    //jaxbMarshaller.marshal(customer, file);
    jaxbMarshaller.marshal(too, System.out);

            }
}
公共类测试{
公共静态void main(字符串[]args)抛出JAXBEException{
Table Table=新表();
表.setThread(“PersonalDetailsDataStatus”);
表.设置宽度(“15”);
表1.订单(“100”);
表.设置体(“Ricky,andersonNov 1999td>工作”);
RootTable too=新的RootTable();
太。可设置(table);
JAXBContext JAXBContext=JAXBContext.newInstance(RootTable.class);
Marshaller jaxbMarshaller=jaxbContext.createMarshaller();
//输出精美印刷品
setProperty(Marshaller.JAXB_格式化的_输出,true);
//jaxbMarshaller.marshall(客户,文件);
jaxbMarshaller.marshal(太多,System.out);
}
}
如果我运行程序,它将显示以下输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<text>
    <table width="15" border="100">
        <tbody>&lt;tr&gt;&lt;td&gt;Ricky,anderson&lt;/td&gt;&lt;td&gt;Nov 1999&lt;/td&gt;td&gt;working&lt;/td&gt;&lt;/tr&gt;</tbody>
        <thread>&lt;&lt;tr&gt;&lt;th&gt;personalDetails&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Status&lt;/th&gt;&lt;/tr&gt;</thread>
    </table>
</text>

特拉德里奇,安德森/TD1999年11月/tdtdworking/td/tr
trthpersonalDetails/ththDate/thStatus/th/tr

我不知道如何继续下去?还有其他选择吗?有人能帮我吗。

要解决这个问题,请继续建模。您必须创建类
Tr
Td
,并将这些类的实例添加到表中,而不是添加完整的字符串

然而,我完全同意那些提到使用JAXB生成HTML不是最好的主意的人的观点。我不知道你的最终目标是什么,尽管理论上HTML是XML的一个子集,但有更好的工具可以使用它


然而,我可以提到,我个人使用XML解析技术来处理HTML,但是还有其他一些限制使我这样做

你试过运行你的代码吗?它打印什么?如果你问我,虽然技术上没有错,但在xml文件中这样放置HTML表是个坏主意,我强烈建议不要直接从Java类生成HTML。相反,请尝试生成一个干净的XML格式,并在其上应用XSLT转换。下面是@四十二-+1建议的方法示例-您不需要为
Td
创建一个类,因为
Tr
可以将
列表
映射到
Td
元素。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<text>
    <table width="15" border="100">
        <tbody>&lt;tr&gt;&lt;td&gt;Ricky,anderson&lt;/td&gt;&lt;td&gt;Nov 1999&lt;/td&gt;td&gt;working&lt;/td&gt;&lt;/tr&gt;</tbody>
        <thread>&lt;&lt;tr&gt;&lt;th&gt;personalDetails&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Status&lt;/th&gt;&lt;/tr&gt;</thread>
    </table>
</text>