【问题标题】:Write XML using saxon as a library使用 saxon 作为库编写 XML
【发布时间】:2021-03-11 17:43:03
【问题描述】:

我可以使用 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 的示例。 是否可以?如果可以的话,能给我一些建议吗?

【问题讨论】:

  • “写”是什么意思?将其存储在文件中?将 Java 对象转换为 XML?

标签: java xml saxon


【解决方案1】:

实际上有一系列机制,有些非常成熟,有些相对较新。

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

最近我介绍了 Push API,它给人一种“流畅的 API”的感觉,当你启动一个元素节点时,它会返回一个句柄,你可以用它来编写元素的子节点和属性.

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-23
    • 2011-05-03
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    相关资源
    最近更新 更多