首页 文章

如何使用JAXB保留XML注释?

提问于
浏览
2

如何在不丢失注释的情况下解组和编组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-->

2 回答

  • 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>
    

    这样,语义在模型中不会在注释中“隐藏” .

  • 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();
            }
        }
    
    }
    

相关问题