gpt4 book ai didi

java - 使用 JAXB 解析 XML

转载 作者:行者123 更新时间:2023-12-01 04:55:31 27 4
gpt4 key购买 nike

我是 xml 解析新手。我使用 DOM 来解析 xml 以进行练习。现在我想将一些内容转移到其他 xml 解析框架。所以我选择了 JAXB 解析器。根据我的要求,我无法为所有 xml 标签创建 getter setter。因为我将得到的 xml 是动态的。所以我事先不知道创建 getter/setter 的标签。我引用了此链接 http://www.mkyong.com/java/jaxb-hello-world-example/ 。有没有办法在不创建 getter 和 setter 的情况下进行解析。请说清楚。

最佳答案

您可以利用@XmlAnyElementXmlAnyAttribute 注释来映射额外内容。如果您不需要 get/set 方法,只需在您的类上添加 @XmlAccessorType(XmlAccessType.FIELD) 即可。

客户

在下面的类中,我们映射特定的 XML 属性和元素,然后使用 @XmlAnyElement 注释来映射可能出现的任何其他元素,并使用 @XmlAnyAttribute 来映射映射可能出现的任何其他属性。

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

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {

@XmlAttribute
int id;

@XmlAnyAttribute
Map<QName, String> otherAttributes;

String name;

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

}

input.xml

我们将在演示代码中解码以下 XML 文档。

<?xml version="1.0" encoding="UTF-8"?>
<customer id="123" status="good">
<name>Jane Doe</name>
<address>
<street>1 A Street</street>
<city>Any Town</city>
</address>
<phone-number>555-1111</phone-number>
</customer>

演示

以下文档将解码 XML 输入,将所有生成的对象内容转储到 System.out 并将对象编码回 XML。

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(Customer.class, Address.class);

Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum14272453/input.xml");
Customer customer = (Customer) unmarshaller.unmarshal(xml);


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

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

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

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

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

}

输出

下面是运行演示代码的输出,请注意如何使用 XML 文档中的数据填充所有字段。

customer.id
123
customer.otherAttributes
status=good
customer.name
Jane Doe
customer.otherElements
forum14272453.Address@24f454e4
[phone-number: null]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="123" status="good">
<name>Jane Doe</name>
<address>
<street>1 A Street</street>
<city>Any Town</city>
</address>
<phone-number>555-1111</phone-number>
</customer>

了解更多信息

关于java - 使用 JAXB 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14272453/

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