gpt4 book ai didi

java - 将对象编码为 XML 会导致添加重复节点

转载 作者:行者123 更新时间:2023-11-29 05:50:20 24 4
gpt4 key购买 nike

我有一个对象需要编码为 XML。为此,我使用 JAXB。生成的 XML 文件已创建,但我最终得到了重复的节点:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<order>
<supplier_id>suppliername</supplier_id>
<store_name>storename</store_name>
<order_id>1234567890</order_id>
<order_item>
<order_item_id>0987654321</order_item_id>
<item_state>Shipped</item_state>
<item_state_date>2012-12-27T14:40:00.000-05:00</item_state_date>
<carrier_code>NA</carrier_code>
<carrier_name>CarrierName</carrier_name>
<shipping_method>Expedited</shipping_method>
<tracking_number>348134987124872734817324</tracking_number>
<backorder_replacement_sku_price>0.0</backorder_replacement_sku_price>
</order_item>
<order_item>
<order_item_id>0987654321</order_item_id>
<item_state>Shipped</item_state>
<item_state_date>2012-12-27T14:40:00.000-05:00</item_state_date>
<carrier_code>NA</carrier_code>
<carrier_name>CarrierName</carrier_name>
<shipping_method>Expedited</shipping_method>
<tracking_number>348134987124872734817324</tracking_number>
<backorder_replacement_sku_price>0.0</backorder_replacement_sku_price>
</order_item>
....

我只需要第一个 <order_item> 节点,后面的都是错误的。

我的代码如下:

JAXBContext context = JAXBContext.newInstance(classname.class.getPackage().getName());
Marshaller marsheller = context.createMarshaller();

Order order = new Order();
OrderItem orderItem = new OrderItem();

...Business logic related to our ERP system...
//We start a loop here to iterate over search results. The goal is to have one XML file per search row returned. No knowledge of the ERP system is required.

for (SearchRow row : results.getSearchRowList().getSearchRow()) {
//we capture our variables from the search results here and build our order and orderItem objects with them.

order.setSupplierId("suppliername");
order.setStoreName("storename");
order.setOrderId(orderNumber);
orderItem.setOrderItemId(orderItemId);
orderItem.setItemState(StatusCodeType.SHIPPED);
orderItem.setItemStateDate(date2);
orderItem.setCarrierCode("NA");
orderItem.setCarrierName(carrierName);
orderItem.setShippingMethod(shippingMethod);
orderItem.setTrackingNumber(trackingNumber);

order.getOrderItem().add(orderItem);
File f = new File("tempFiles/" + order.getOrderId() + ".xml");
marsheller.marshal(order, f);
}

我认为问题出在循环上,但如果我从对象本身创建对象后记录所有变量,则只显示 orderItem 结果,而不是多个 orderItems。

谁能指出我偏离轨道的方向?

最佳答案

你要么需要

  • 创建一个 new Order()new OrderItem()循环中的每次迭代或
  • 移动order.getOrderItem().add(orderItem);在创建 Order 后立即跳出循环和 OrderItem实例。

您当前的逻辑是添加相同的 OrderItem每次循环都将实例添加到列表中,所以第一次迭代你会得到一个 <order_item>元素,第二次迭代你会得到两个相同的元素,第三次迭代三个,等等。

关于java - 将对象编码为 XML 会导致添加重复节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14143565/

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