gpt4 book ai didi

java xml 到对象

转载 作者:行者123 更新时间:2023-12-01 14:27:53 25 4
gpt4 key购买 nike

我有一个像这样的 xml 文件:

<passwords>
<use>
<title>LoL</title>
<username>hallo</username>
<password>asdasd</password>
<note>asdasdasdasd</note>
</use>
<E-Mail>
<use>
<title>GMail</title>
<username>hallo</username>
<password>asdasd</password>
<note>asdasdasdasd</note>
</use>
<Webmail>
<use>
<title>Yahoo</title>
<username>hallo</username>
<password>asdasd</password>
<note>asdasdasdasd</note>
</use>
</Webmail>
</E-Mail>

以及类别的类

public class Category {
private ArrayList<Usage> usages;
private ArrayList<Category> categories;
private String name;

public Category(String name){
this.name = name;
usages = new ArrayList<>();
categories = new ArrayList<>();
}
public void addUsage(Usage usage){
usages.add(usage);
}
public void addCategory(Category category){
categories.add(category);
}
}

以及使用

public class Usage {
private String title;
private String username;
private String password;
private String notes;


public void setTitle(String title) {
this.title = title;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setNotes(String notes) {
this.notes = notes;
}


public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getNotes() {
return notes;
}
public String getTitle(){
return title;
}

public String toString(){
return "[[" + this.title + "][" + this.username + "][" + this.password + "][" + this.notes + "]]";
}
}

我想获取 1 个类别对象以及数组列表中的其他类别和用法,但我不知道如何使用标准解析器来分析它。

我知道如何仅使用一个类别且没有子类别来做到这一点。

最佳答案

正如前面提到的,您可以使用 JAXB,这是一个非常基本的示例,只是为了让您了解使用这个有用的工具有多么容易:

首先,如果你把你的XML变成一个模式会更好,你可以使用:

http://www.freeformatter.com/xsd-generator.html

但是如果你想使用你的类,那么你可以使用注释,例如,这是一个基本类:

@XmlRootElement(name = "programmer")
public class ProgrammerBean implements Serializable {
//Here attributes and getters and setters.
}

我将声明一个单例类来管理我的类:

public class XMLFileHandler {

private static XMLFileHandler instance;

private XMLFileHandler() {
}

public static XMLFileHandler getInstance() {
if (instance == null) {
instance = new XMLFileHandler();
}
return instance;
}

public void writeXml(String filePath, Object targetObject)
throws FileNotFoundException, JAXBException {
File xmlFile = new File(filePath);
OutputStream xmlOutput = new FileOutputStream(xmlFile);
// Define a JAXBContext
JAXBContext context = null;
// When I write I use a marshaller
Marshaller xmlWriter = null;

// I set the class of the objet to write
context = JAXBContext.newInstance(targetObject.getClass());
// I create the marshaller
xmlWriter = context.createMarshaller();
// I set the properties for the output
xmlWriter.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// Finally write
xmlWriter.marshal(targetObject, xmlOutput);

}

public Object readXml(String filePath, Class objType) throws JAXBException {
Object read = null;
JAXBContext context = null;
Unmarshaller xmlReader = null;

context = JAXBContext.newInstance(objType);
xmlReader = context.createUnmarshaller();
read = xmlReader.unmarshal(new File(filePath));
return read;
}
}

然后,使用时您可以:

XmlFileHandler xmlHandler = XmlFileHandler.getInstance();
ProgrammerBean myObject = (ProgrammerBean) xmlHandler.readXml("/home/developer/programmer.xml", ProgrammerBean.class);

希望它能帮助您了解 JaxB 的基础知识,正如前面提到的,如果您使用模式并从中生成 jaxb 类会更容易,那么这只是 set 和 get 方法的问题。谨致问候。

关于java xml 到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17045274/

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