JAXB生成的xml中的“ xsi:type”和“ xmlns:xsi”

我使用JAXB创建文件夹和文件层次结构

我的模特:

@XmlRootElement

public class Root {

@XmlAttribute

private String path;

@XmlElement(name = "dir")

private ArrayList<Dir> rootContentDirs = null;

@XmlElement(name = "file")

private ArrayList<FileObj> rootContentFiles = null;

public void setRootContentDirs(ArrayList<Dir> rootContentDirs) {

this.rootContentDirs = rootContentDirs;

}

public void setRootContentFiles(ArrayList<FileObj> rootContentFiles) {

this.rootContentFiles = rootContentFiles;

}

public void setPath(String path) {

this.path = path;

}

}

public class Dir {

@XmlAttribute

private String name;

@XmlElement(name = "dir")

private ArrayList dirs = null;

@XmlElement(name = "file")

private ArrayList files = null;

public void setName(String name) {

this.name = name;

}

public void setDirs(ArrayList dirs) {

this.dirs = dirs;

}

public void setFiles(ArrayList files) {

this.files = files;

}

}

public class FileObj{

@XmlAttribute

private String name;

@XmlAttribute

private long size;

@XmlAttribute

private String type;

public void setName(String name) {

this.name = name;

}

public void setSize(long size) {

this.size = size;

}

public void setType(String type) {

this.type = type;

}

}

我想制作目录和文件树:

public class XmlByJaxb extends Generator {

private static final String JAXB_XML = "./jaxb.xml";

private static Root root = null;

@Override

public void output() throws IOException {

JAXBContext context = null;

Marshaller m = null;

try {

context = JAXBContext.newInstance(Root.class, Dir.class, FileObj.class);

m = context.createMarshaller();

m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

m.marshal(root, new File(JAXB_XML));

} catch (JAXBException e) {

}

}

@Override

public void run() {

ArrayList<FileObj> rootFiles = addFiles(dir);

ArrayList<Dir> rootDirs = make(dir);

root = new Root();

root.setPath(dir.getPath());

root.setRootContentFiles(rootFiles);

root.setRootContentDirs(rootDirs);

/.../

}

但是我在生成的xml中有一个奇怪的“ xsi:type”和“ xmlns:xsi”:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<root path="/home/phlamey/IdeaProjects/FileUtillite">

<dir name="src">

<dir xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="dir" name="test">

<dir xsi:type="dir" name="java">

/.../

所以我的问题是:这是什么意思,如何删除?

回答:

在您的Dir类中,您没有指定集合的​​类型,这就是JAXB添加xsi:type属性的原因。

你有:

@XmlElement(name = "dir")

private ArrayList dirs;

如果您ArrayList要包含的实例,Dir则可以执行以下操作:

@XmlElement(name = "dir")

private ArrayList<Dir> dirs = null;

如果由于某种原因您不想在集合中指定类型,则可以在@XmlElement批注中进行指定:

@XmlElement(name = "dir", type=Dir.class)

private ArrayList dirs = null;

以上是 JAXB生成的xml中的“ xsi:type”和“ xmlns:xsi” 的全部内容, 来源链接: utcz.com/qa/433295.html

回到顶部