gpt4 book ai didi

java - 使用 JAXB 动态读取 XML

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:49 24 4
gpt4 key购买 nike

我正在尝试使用 JAXB 动态提取各种 XML 的各个字段。其中一个示例如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<Entities TotalResults="1">
<Entity Type="test-set-folder">
<Fields>
<Field Name="id">
<Value>1760</Value>
</Field>
<Field Name="ver-stamp">
<Value>0</Value>
</Field>
<Field Name="parent-id">
<Value>109</Value>
</Field>
<Field Name="last-modified">
<Value>2017-02-24 15:50:36</Value>
</Field>
<Field Name="hierarchical-path">
<Value>AAAAAAABN</Value>
</Field>
<Field Name="description">
<Value />
</Field>
<Field Name="view-order" />
<Field Name="name">
<Value>ABCDEF</Value>
</Field>
<Field Name="attachment">
<Value />
</Field>
<Field Name="workflow">
<Value />
</Field>
</Fields>
<RelatedEntities />
</Entity>
</Entities>

我想在每个 XML 的字段发生变化时动态地执行此操作。我的基本目标是捕捉每个领域,并为我的方便而使用它。例如,field.id 应返回 1760 等。

我的Entity.java如下:

import java.util.*;
import javax.xml.bind.annotation.*;
import javax.xml.namespace.QName;

@XmlRootElement(name = "Entities")
@XmlAccessorType(XmlAccessType.FIELD)
public class Entity {

@XmlAttribute
int id;

@XmlAnyAttribute
Map<QName, String> otherAttributes;

String name;

@XmlAnyElement(lax=true)
List<Object> otherElements;

}

调用Entity.java的代码如下:

import java.io.File;
import java.util.Map.Entry;
import javax.xml.bind.*;
import javax.xml.namespace.QName;

public class Demo {

public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Entity.class);

Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("path\\to xml\\file");
Entity entity = (Entity) unmarshaller.unmarshal(xml);

// Mapped XML Attribute
System.out.println("entity.id");
System.out.println(" " + entity.id);

// Other XML Attributes
System.out.println("entity.otherAttributes");
for(Entry<QName, String> entry : entity.otherAttributes.entrySet()) {
System.out.println(" " + entry);
}

// Mapped XML Element
System.out.println("entity.name");
System.out.println(" " + entity.name);

// Other XML Elements
System.out.println(entity.otherElements);
for(Object object : entity.otherElements) {
System.out.println(" " + object);
}

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(entity, System.out);
}

}

我的困惑是 XML 是嵌套的,即第四层数据是我感兴趣的:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<Entities TotalResults="1">
<Entity Type="test-set-folder">
<Fields>
<Field Name="id">
<Value>1760</Value>
</Field>
.
.
.

我的实体类代码可能是错误的,但是有人可以帮助我解决这个问题吗?

最佳答案

我认为您必须查看下面的示例,其中 xml 结构可能有所不同,但您仍然可以使用 jaxB 加载内容

XSD schema for xml file that can change for JAXB

让我们看看它是否适合您!

关于java - 使用 JAXB 动态读取 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42803359/

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