gpt4 book ai didi

java - JAXB - 如何解码此 XML?

转载 作者:数据小太阳 更新时间:2023-10-29 01:56:19 25 4
gpt4 key购买 nike

我想使用 JaxB 将一些非常讨厌的 XML 解码为 java 对象。到目前为止,大部分内容看起来都非常简单 - 但我有点坚持这一点:

            <assets>
<asset type="fixed">74,414</asset>
<asset type="current">1,022,069</asset>
<asset type="other">0</asset>
<total type="assets">1,096,483</total>
</assets>

这是dtd的相关部分

<!ELEMENT assets (asset|total)*>
<!ELEMENT asset (#PCDATA)>
<!ATTLIST asset
type CDATA #REQUIRED>
<!ELEMENT total (#PCDATA)>
<!ATTLIST total
type CDATA #REQUIRED>

有什么想法吗?还是我应该为此放弃尝试使用 JAXB?

谢谢

最佳答案

查看 XML 和 DTD,我创建了结构的 XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="assets">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="asset"/>
<xs:element maxOccurs="unbounded" ref="total"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="asset">
<xs:complexType mixed="true">
<xs:attribute name="type" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="total">
<xs:complexType mixed="true">
<xs:attribute name="type" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:schema>

使用 xjc 从 XSD 生成带有 JAXB 绑定(bind)注释的 Java 类。然后使用解码器将其解码为 Java 对象。

编辑

生成的 Java 类:

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlValue;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"asset",
"total"
})
@XmlRootElement(name = "assets")
public class Assets {

@XmlElement(required = true)
protected List<Asset> asset;
@XmlElement(required = true)
protected List<Total> total;

public List<Asset> getAsset() {
if (asset == null) {
asset = new ArrayList<Asset>();
}
return this.asset;
}

public List<Total> getTotal() {
if (total == null) {
total = new ArrayList<Total>();
}
return this.total;
}

}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlRootElement(name = "asset")
public class Asset {

@XmlValue
protected String content;
@XmlAttribute(required = true)
protected String type;

public String getContent() {
return content;
}

public void setContent(String value) {
this.content = value;
}

public String getType() {
return type;
}

public void setType(String value) {
this.type = value;
}

}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlRootElement(name = "total")
public class Total {

@XmlValue
protected String content;
@XmlAttribute(required = true)
protected String type;

public String getContent() {
return content;
}

public void setContent(String value) {
this.content = value;
}

public String getType() {
return type;
}

public void setType(String value) {
this.type = value;
}

}

关于java - JAXB - 如何解码此 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3206151/

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