gpt4 book ai didi

java - XML 正确编码,但未解码,因为 XML 文档被声明为无效

转载 作者:行者123 更新时间:2023-11-30 04:22:17 25 4
gpt4 key购买 nike

我正在尝试重新读取由 Java 程序生成的 XML 文件,并以 JTable 形式提供它的图形表示。手动生成的 XML 符合架构,但程序将其检测为无效。

逻辑很简单:
1. 检查task-list.xmltask-list-schema.xsd是否存在。
2. 如果,则解码 XML,使用 XML 文档中的数据准备行,将行添加到表中。
3. 如果,请准备一个空白GUI。

问题是 XML 不符合架构。问题不在于生成的 XML 或架构,而是在于用于绑定(bind)的类。它们是这样的:

FormatList
|->Vector<Format>

TaskList
|-> Vector<Task>

Task
|-> input xs:string
|-> output xs:string
|-> Format
|-> taskID xs:integer
|-> isReady xs:boolean

Format
|-> name xs:string
|-> width xs:string
|-> height xs:string
|-> extension xs:string

因此,FormatListTask 都共享同一个类 Format,因为每个视频转换任务都有一个关联的格式。

这是我得到的错误:
enter image description here

这是生成的 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<task-list>
<task>
<input>E:\Videos\AutoIT\AutoIt Coding Tutorial Two - Website Functions.flv</input>
<output>E:\test\StandaloneVideoConverter</output>
<format>
<name>[AVI] HD 1080p</name>
<width>1920</width>
<height>1080</height>
<extension>.avi</extension>
</format>
<taskID>3</taskID>
<isReady>false</isReady>
</task>
</task-list>

如何解决这个问题?

@XmlAccessorType(XmlAccessType.FIELD)
public class Format {
@XmlElement(name="name")
private String name;
@XmlElement(name="width")
private int width;
@XmlElement(name="height")
private int height;
@XmlElement(name="extension")
private String extension;

//getters and setters, synchronized
}

@XmlRootElement(name="format-list")
@XmlAccessorType(XmlAccessType.FIELD)
public class FormatList {
@XmlElement(name="format")
private Vector<Format> formats;


public Vector<Format> getFormats(){
return formats;
}
// this is the complete class
}

@XmlAccessorType(XmlAccessType.FIELD)
public class Task {
@XmlElement(name="input")
private String input; // String representing the input file
@XmlElement(name="output")
private String output; // String representing the output file
@XmlElement(name="format")
private Format format; // a jaxb.classes.Format representing the format of conversion
@XmlElement(name="taskID")
private long taskID; // a unique ID for each task.
@XmlElement(name="isReady")
private boolean isReady; // boolean value representing whether the task is ready for conversion

@XmlTransient
private boolean isChanging = false; // boolean representing if the user is changing the task DO NOT MARSHALL
@XmlTransient
private boolean isExecuting = false; // boolean representing whether the task is being executed DO NOT MARSHALL



// getters and setters, synchronized
}

@XmlRootElement(name="task-list")
@XmlAccessorType(XmlAccessType.FIELD)
public class TaskList {

public TaskList(){
tasks = new Vector<Task>();
}

@XmlElement(name="task")
Vector<Task> tasks;

public Vector<Task> getTasks(){
return tasks;
}

// this is the complete class

}

最佳答案

该错误似乎与您发布的 XML 不匹配。该错误表明 JAXB 正在尝试解码 format-list 元素,但不知道如何处理它。该 XML 中没有 format-list。根据给定的错误,我希望您有这样的代码:

JAXBContext.newInstance(TaskList.class).createUnmarshaller().unmarshal(xml);

并且您将 FormatList XML 而不是 TaskList XML 作为输入。

关于java - XML 正确编码,但未解码,因为 XML 文档被声明为无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16752481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com