【问题标题】:JAXB XML Parsing ProblemJAXB XML 解析问题
【发布时间】:2011-08-11 03:14:22
【问题描述】:

我使用 JAXB 将我的对象写入 Java 中的 XML 文件。它写入成功。我检查 XML 文件,所有值都是真的。但是当我想读取这个 XML 文件时,一些元素值会发生变化。你有什么想法吗?

我的表类有 2 个实例,它们的类型是行列表(行类)和类型(来自类型类)。

Table t = tester.readXML("tables/course.xml");

List<Row> rows = new LinkedList<Row>();
rows.addAll(t.getRows());

for(Row r : rows)
    System.out.println(r.getName() + " " + r.getType().getIsPrimary());
}

这里是 XML Reader 方法:

public Table readObject(String filepath) throws JAXBException {

        JAXBContext jc = JAXBContext.newInstance(Table.class);
        Unmarshaller u = jc.createUnmarshaller();
        Table hw = (Table) u.unmarshal(new File(filepath));     
        return hw;
    }

public Table readXML(String file) {
    try {
        File f = new File(file);
        if(f.exists()) {
            Table t = new Table();
            t = readObject(file);
            return t;               
        }           
    } catch (JAXBException e) {         
        e.printStackTrace();
    }
    return null;
}

【问题讨论】:

  • 你能发布 readXML 函数吗?另外,您能否发布编写/编组 XML 的代码?
  • 哪些价值观发生了变化?另外,如果将加载的 XML 写回文件中,它会不会与原始 XML 不同?
  • 是的。如果我将加载的 XML 写回文件中,它就会变得不同。
  • 您也可以发布 XML 吗?我建议您编辑您的问题,而不是将其作为答案发布。

标签: java xml parsing jaxb xml-parsing


【解决方案1】:

@XmlElements

@XmlElements 注释用于表示 XML 模式选择结构。所以而不是:

@XmlElements(value = { @XmlElement(name ="row") })
private List<Row> rows = new LinkedList<Row>();

你只需要:

@XmlElement(name ="row")
private List<Row> rows = new LinkedList<Row>();

@XmlElementWrapper

如果您想在“行”元素周围有一个分组元素(“行”),您可以使用@XmlElementWrapper 注释:

@XmlElementWrapper
@XmlElement(name ="row")
private List<Row> rows = new LinkedList<Row>();

这将为您提供 XML:

<rows>
    <row>...</row>
    <row>...</row>
</rows>

【讨论】:

  • 我认为问题是由 Type 类引起的。从 XML 读取时,它的一些属性会发生变化
  • 好的,我更正了问题。我在使用 XMLRootElement 时遇到了错误
猜你喜欢
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 2012-12-25
  • 2014-09-18
相关资源
最近更新 更多