まず第一に、あなたの例は xml ファイルではないことを指摘したいと思います: ルート要素はなく、<ORDER="123">
andはand<ORDER_LINE="3">
のようなものであると思われます。<ORDER ID="123">
<ORDER_LINE ID="3">
次に、xml ファイルを作成する必要がある場合は、JAXB ライブラリと注釈を使用します。
Order
ORDER に関するすべての情報を含むクラスを作成しました(のリストへの参照がありますOrderLine
)。
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.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
@XmlAccessorType(XmlAccessType.FIELD)
public class Order {
@XmlAttribute(name="ID")
private String id;
@XmlElement(name="ORDER_LINE")
private List<OrderLine> orderLineList = new ArrayList<OrderLine>();
public Order(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public List<OrderLine> getOrderLineList() {
return orderLineList;
}
public void setOrderLineList(List<OrderLine> orderLineList) {
this.orderLineList = orderLineList;
}
public Order addOrderLine(OrderLine orderLine) {
orderLineList.add(orderLine);
return this;
}
}
OrderLine
次に、ORDER_LINE に関するすべての情報を含むクラスを作成しました。
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
@XmlAccessorType(XmlAccessType.FIELD)
public class OrderLine {
@XmlAttribute(name="ID")
private String id;
@XmlAttribute(name="product")
private String product;
@XmlAttribute(name="QUANTITY")
private String quantity;
public OrderLine(String id, String product, String quantity) {
this.id = id;
this.product = product;
this.quantity = quantity;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
public String getQuantity() {
return quantity;
}
public void setQuantity(String quantity) {
this.quantity = quantity;
}
}
最後にOrders
、xml ファイルのルート要素となるクラスを作成しました。
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="ORDERS")
public class Orders {
@XmlElement(name="ORDER")
List<Order> orderList = new ArrayList<Order>();
public List<Order> getOrderList() {
return orderList;
}
public Orders addOrder(Order order) {
orderList.add(order);
return this;
}
public static void main(String[] args) {
Orders orders = new Orders()
.addOrder(new Order("123")
.addOrderLine(new OrderLine("1", "abc", "1"))
.addOrderLine(new OrderLine("2", "def", "2")))
.addOrder(new Order("456")
.addOrderLine(new OrderLine("3", "ghi", "3"))
.addOrderLine(new OrderLine("4", "jkl", "4"))
.addOrderLine(new OrderLine("5", "mno", "2")));
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Orders.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(orders, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
メイン メソッドでは、 のインスタンスを作成Orders
し、必要な情報を入力するだけです。その後は、JAXB ライブラリのメソッドを使用するだけです。出力は次のとおりです。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ORDERS>
<ORDER ID="123">
<ORDER_LINE ID="1" product="abc" QUANTITY="1"/>
<ORDER_LINE ID="2" product="def" QUANTITY="2"/>
</ORDER>
<ORDER ID="456">
<ORDER_LINE ID="3" product="ghi" QUANTITY="3"/>
<ORDER_LINE ID="4" product="jkl" QUANTITY="4"/>
<ORDER_LINE ID="5" product="mno" QUANTITY="2"/>
</ORDER>
</ORDERS>
これがお役に立てば幸いです。