Java:Jax读写xml、类困惑
Java:Jax reading and writing xml, classes confusion
你好,我是 xml reading/writing 的新手,我不确定我是否正在阅读 correctly.I 我正在使用 Java 内核和 jaxb-api 版本2.1.What 我想做的基本上是创建产品对象并根据这个 xml.the 将它们写入不同的文件问题是我不确定如何标记字段
我只需要创建一个订单 class 并将产品添加为内部字段的包装器,还是我还需要创建一个产品 class?
这让我感到困惑,因为产品是内部订单,但它就像是内部其他标签的包装器。
我在网上找到了几个教程,但是 none 其中处理对象列表,大多数示例包含简单的字符串字段或数组 Strings.So 我不确定如何处理这个问题。
如有任何帮助,我们将不胜感激。
非常感谢
<orders>
<order created='2012-07-12T15:29:33.000' ID='2343'>
<product>
<description>Sony 54.6" (Diag) Xbr Hx929 Internet Tv</description>
<gtin>00027242816657</gtin>
<price currency="USD">2999.99</price>
<supplier>Sony</supplier>
</product>
<product>
<description>Apple iPad 2 with Wi-Fi 16GB - iOS 5 - Black</description>
<gtin>00885909464517</gtin>
<price currency="USD">399.0</price>
<supplier>Apple</supplier>
</product>
<product>
<description>Sony NWZ-E464 8GB E Series Walkman Video MP3 Player Blue</description>
<gtin>00027242831438</gtin>
<price currency="USD">91.99</price>
<supplier>Sony</supplier>
</product>
</order>
<order created='2012-07-13T16:02:22.000' ID='2344'>
<product>
<description>Apple MacBook Air A 11.6" Mac OS X v10.7 Lion MacBook</description>
<gtin>00885909464043</gtin>
<price currency="USD">1149.0</price>
<supplier>Apple</supplier>
</product>
<product>
<description>Panasonic TC-L47E50 47" Smart TV Viera E50 Series LED HDTV</description>
<gtin>00885170076471</gtin>
<price currency="USD">999.99</price>
<supplier>Panasonic</supplier>
</product>
</order>
</orders>
@XmlRootElement
public class Order {
private LocalDateTime created;
private List<Product> products;
public LocalDateTime getCreated() {
return created;
}
@XmlElement
public void setCreated(LocalDateTime created) {
this.created = created;
}
public List<Product> getProducts() {
return products;
}
@XmlElementWrapper(name="product")
@XmlElement
public void setProducts(List<Product> products) {
this.products = products;
}
}
您的代码存在几个问题。
(为了不破坏你的学习体验,我只给出了一些说明,没有完整的代码。)
- 代表XML根元素
<orders>...</orders>
你需要另一个 class(我们称它为 Orders
)。
- 用
@XmlRootElement
注释。
<orders>
元素包含多个 <order>
元素。
因此您需要添加一个成员List<Order> orders
。
用 @XmlElement(name="order")
. 注释
- 在你的
Order
class 中:
- 这里不需要
@XmlRootElement
注解,
因为 <order>
不是根元素。
- 只用
@XmlElement(name="product")
注释 products
(正如@PiotrP.Karwasz 在他的评论中所写)。
- 用
@XmlAttribute
而不是 @XmlElement
注释 created
成员。
这是因为你有一个 XML 属性 created="something"
,
不是 XML 元素 <created>something</created>
.
- JAXB 可能会抱怨它不支持
LocalDateTime
。
所以您可能需要将其更改为 Date
.
你好,我是 xml reading/writing 的新手,我不确定我是否正在阅读 correctly.I 我正在使用 Java 内核和 jaxb-api 版本2.1.What 我想做的基本上是创建产品对象并根据这个 xml.the 将它们写入不同的文件问题是我不确定如何标记字段 我只需要创建一个订单 class 并将产品添加为内部字段的包装器,还是我还需要创建一个产品 class? 这让我感到困惑,因为产品是内部订单,但它就像是内部其他标签的包装器。 我在网上找到了几个教程,但是 none 其中处理对象列表,大多数示例包含简单的字符串字段或数组 Strings.So 我不确定如何处理这个问题。
如有任何帮助,我们将不胜感激。 非常感谢
<orders>
<order created='2012-07-12T15:29:33.000' ID='2343'>
<product>
<description>Sony 54.6" (Diag) Xbr Hx929 Internet Tv</description>
<gtin>00027242816657</gtin>
<price currency="USD">2999.99</price>
<supplier>Sony</supplier>
</product>
<product>
<description>Apple iPad 2 with Wi-Fi 16GB - iOS 5 - Black</description>
<gtin>00885909464517</gtin>
<price currency="USD">399.0</price>
<supplier>Apple</supplier>
</product>
<product>
<description>Sony NWZ-E464 8GB E Series Walkman Video MP3 Player Blue</description>
<gtin>00027242831438</gtin>
<price currency="USD">91.99</price>
<supplier>Sony</supplier>
</product>
</order>
<order created='2012-07-13T16:02:22.000' ID='2344'>
<product>
<description>Apple MacBook Air A 11.6" Mac OS X v10.7 Lion MacBook</description>
<gtin>00885909464043</gtin>
<price currency="USD">1149.0</price>
<supplier>Apple</supplier>
</product>
<product>
<description>Panasonic TC-L47E50 47" Smart TV Viera E50 Series LED HDTV</description>
<gtin>00885170076471</gtin>
<price currency="USD">999.99</price>
<supplier>Panasonic</supplier>
</product>
</order>
</orders>
@XmlRootElement
public class Order {
private LocalDateTime created;
private List<Product> products;
public LocalDateTime getCreated() {
return created;
}
@XmlElement
public void setCreated(LocalDateTime created) {
this.created = created;
}
public List<Product> getProducts() {
return products;
}
@XmlElementWrapper(name="product")
@XmlElement
public void setProducts(List<Product> products) {
this.products = products;
}
}
您的代码存在几个问题。 (为了不破坏你的学习体验,我只给出了一些说明,没有完整的代码。)
- 代表XML根元素
<orders>...</orders>
你需要另一个 class(我们称它为Orders
)。- 用
@XmlRootElement
注释。 <orders>
元素包含多个<order>
元素。 因此您需要添加一个成员List<Order> orders
。 用@XmlElement(name="order")
. 注释
- 用
- 在你的
Order
class 中:- 这里不需要
@XmlRootElement
注解, 因为<order>
不是根元素。 - 只用
@XmlElement(name="product")
注释products
(正如@PiotrP.Karwasz 在他的评论中所写)。 - 用
@XmlAttribute
而不是@XmlElement
注释created
成员。 这是因为你有一个 XML 属性created="something"
, 不是 XML 元素<created>something</created>
. - JAXB 可能会抱怨它不支持
LocalDateTime
。 所以您可能需要将其更改为Date
.
- 这里不需要