使用 saxon 作为库编写 XML

Write XML using saxon as a library

我可以使用 Java DOM:

来写这个 XML
    <?xml version="1.0" encoding="UTF-8"?>
    <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
         xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
         xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
      <cac:Employee id="1">
        <cbc:name>Pankaj</cbc:name>
        <cbc:age>29</cbc:age>
        <cbc:role>Java Developer</cbc:role>
        <cbc:gender>Male</cbc:gender>
      </cac:Employee>
      <cac:Employee id="2">
        <cbc:name>Lisa</cbc:name>
        <cbc:age>35</cbc:age>
        <cbc:role>Manager</cbc:role>
        <cbc:gender>Female</cbc:gender>
      </cac:Employee>
    </Invoice>

但是,我想知道我是否可以使用 Saxon 库编写这个 XML。 Saxon 库是一个功能强大的库,可以执行 XPath 评估、快速阅读、XSLT 转换等操作,但我没有找到任何有关如何使用该库编写和 XML 的示例。 可能吗?如果可以,您能给我一些建议吗?

实际上有一系列机制,有些机制已经很完善,有些则相对较新。

您可以使用 Processor.newSerializer() 构造一个 Serializer,然后得到一个 SAX ContentHandler(使用 Serializer.getContentHandler)或一个 StAX XmlStreamWriter(使用Serializer.getXMLStreamWriter) 使您能够一次向序列化程序写入一个事件。这些机制的优点是 API 是标准的,但我发现它们中的任何一个都不是非常用户友好。

最近我介绍了 Push API,它给人一种“流畅 API”的感觉,因为当您启动一个元素节点时,它 returns可用于编写元素的子元素和属性的句柄。

树苗也是新的,有点实验性。这会在内存中构建一个轻量级的不可变树,完成后可以将其写入序列化程序。

对于这两个较新的 API,主要文档是 Javadoc。