gpt4 book ai didi

java - JAXB 生成的 xml 中的 "xsi:type"和 "xmlns:xsi"

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:15 30 4
gpt4 key购买 nike

我使用 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;

关于java - JAXB 生成的 xml 中的 "xsi:type"和 "xmlns:xsi",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20679163/

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