如何在不丢失注释的情况下解组和编组XML文件? 有没有办法使用JAXB,我尝试使用以下link的示例 但它不起作用。
<customer>
<address>
<!-- comments line 1 -->
<street>1 Billing Street</street>
</address>
<address>
<!-- comments line 2-->
<street>2 Shipping Road</street>
</address>
</customer>
我想解组上面的xml,为它添加一个新地址并对其进行编组,而不会丢失以下注释。
<!-- comments line 1 -->
<!-- comments line 2-->
答案 0 :(得分:0)
您可以将JAXB与StAX结合使用来访问尾随注释。
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
XMLInputFactory xif = XMLInputFactory.newFactory();
StreamSource source = new StreamSource("pathOfYourXML/input.xml");
XMLStreamReader xsr = xif.createXMLStreamReader(source);
JAXBContext jc = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Customer xml = (Customer) unmarshaller.unmarshal(xsr);
while(xsr.hasNext()) {
if(xsr.getEventType() == XMLStreamConstants.COMMENT) {
System.out.println(xsr.getText());
}
xsr.next();
}
}
}
答案 1 :(得分:0)
也许更容易调整/扩展客户地址的(数据)模型。
<customer>
<billing-address>
<street></street>
<street></street>
<city></city>
</billing-address>
<shipping-address>
<street></street>
<street></street>
<street></street>
<city></city>
</shipping-address>
</customer>
这样,语义在模型中不会在评论中“隐藏”。
答案 2 :(得分:0)
@Hareesh保留在XML文件中,您需要使用DOM(文档对象模型)读取和写入XML文件,而不是JAXB(如示例中)。但是,可以使用javax.xml.bind.Binder类从从XML文件读取的文档对象中解组对象,并使用活页夹updateXML方法将对象编入文档对象,然后再将其写入XML。文件。
这样做的原因是注释保留在文档对象中,而不是JAXB对象中。您还应该查看updateJAXB方法(如果决定更新文档对象)。
如果您发布的代码无效,我们会更好地帮助您。