kotlin/java生成xml

简介: 四种方式DOM方式SAX方式JDOM方式DOM4J方式Maven依赖 org.

四种方式

  1. DOM方式
  2. SAX方式
  3. JDOM方式
  4. DOM4J方式

Maven依赖

           <!--解析xml-->
            <!-- https://mvnrepository.com/artifact/org.jdom/jdom -->
            <dependency>
                <groupId>org.jdom</groupId>
                <artifactId>jdom</artifactId>
                <version>2.0.2</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
            <dependency>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>1.6.1</version>
            </dependency>

1.DOM方式

package imooc.write.toxml

import org.junit.Test
import java.io.File
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.OutputKeys
import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult

/**
 * @author futao
 * Created on 2017/11/6 - 15:23.
 * 使用DOM方式生成xml文件
 */
class DOM {
    @Test
    fun xml() {
        val documentBuilderFactory = DocumentBuilderFactory.newInstance()
        val documentBuilder = documentBuilderFactory.newDocumentBuilder()
        //返回一个Document对象
        val document = documentBuilder.newDocument()
        //取消xml文件头的standalone信息
        document.xmlStandalone = true
        //创建了一个根节点
        val element = document.createElement("books")
        val book = document.createElement("book")
        book.setAttribute("id", "1")
        book.setAttribute("id2", "2")
        //创建name子节点
        val name = document.createElement("name")
//        name.nodeValue="Java实现生成xml文件"
        name.textContent = "Java实现生成xml文件"
        //添加到book子节点下
        book.appendChild(name)
        //向根节点添加子节点
        element.appendChild(book)
        //向DOM树中添加节点
        document.appendChild(element)

        val transformerFactory = TransformerFactory.newInstance()

        val transformer = transformerFactory.newTransformer()
        //是否自动换行
        transformer.setOutputProperty(OutputKeys.INDENT, "yes")
        transformer.transform(DOMSource(document), StreamResult(File("domBooks.xml")))


//        val outputFormat = OutputFormat.createPrettyPrint()
//        val xmlWriter = XMLWriter(FileOutputStream(File("domBooks.xml")))
//        xmlWriter.write(document)
//        xmlWriter.close()


    }
}

2. SAX方式

package imooc.write.toxml

import org.junit.Test
import org.xml.sax.helpers.AttributesImpl
import java.io.File
import java.io.FileOutputStream
import javax.xml.transform.OutputKeys
import javax.xml.transform.sax.SAXTransformerFactory
import javax.xml.transform.stream.StreamResult

/**
 * @author futao
 * Created on 2017/11/6 - 15:44.
 * 使用SAX方式生成xml文件
 */
class SAX {
    @Test
    fun xml() {
//        val saxParserFactory = SAXParserFactory.newInstance()
//        val saxParser = saxParserFactory.newSAXParser()
        val transformerFactory = SAXTransformerFactory.newInstance() as SAXTransformerFactory
        val transformerHandler = transformerFactory.newTransformerHandler()
        val transformer = transformerHandler.transformer
        //编码格式
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8")
        //是否换行
        transformer.setOutputProperty(OutputKeys.INDENT, "yes")
        val result = StreamResult(FileOutputStream(File("saxBooks.xml")))
        transformerHandler.setResult(result)
        //打开文档
        transformerHandler.startDocument()

        val attributesImpl = AttributesImpl()
        //books根节点开始
        transformerHandler.startElement("", "", "books", attributesImpl)

        attributesImpl.addAttribute("", "", "id", "", "1")
        //给子节点的属性赋值
        //book子节点开始
        transformerHandler.startElement("", "", "book", attributesImpl)
        //清除之前的属性值
        attributesImpl.clear()
        //book节点的子节点name节点开始
        transformerHandler.startElement("", "", "name", attributesImpl)
        //向name节点中添加值
        transformerHandler.characters("从入门到精通".toCharArray(), 0, "从入门到精通".toCharArray().size)
        //book节点的子节点name节点结束
        transformerHandler.endElement("", "", "name")
        //book子节点结束
        transformerHandler.endElement("", "", "book")
        //books根节点结束
        transformerHandler.endElement("", "", "books")


        //关闭文档
        transformerHandler.endDocument()


    }
}

3. JDOM方式

package imooc.write.toxml

import org.jdom2.CDATA
import org.jdom2.Document
import org.jdom2.Element
import org.jdom2.output.Format
import org.jdom2.output.XMLOutputter
import org.junit.Test
import java.io.File
import java.io.FileOutputStream

/**
 * @author futao
 * Created on 2017/11/6 - 18:59.
 * JDOM方式生成xml
 */
class JDOM {
    @Test
    fun xml() {
        //生成rss根节点
        val rss = Element("rss")
        //给rss节点添加属性值
        rss.setAttribute("id", "1")
        //生成channel节点
        val channel = Element("channel")
        //给rss节点添加channel子节点
        rss.addContent(channel)
        //生成title节点
        val title = Element("title")
        //设置title的内容
        title.text = "                 我是                 title                   "
        //把title节点添加到channel的子节点
        channel.addContent(title)


        val link1 = Element("link1")
        channel.addContent(link1)
        val content = CDATA("link")
        content.text = ">>><<<<www.baidu.com"
        link1.addContent(content)


        val link2 = Element("link2")
        link2.text = ">>><<<www.baidu.com"
        channel.addContent(link2)


        //生成一个Document对象
        val document = Document(rss)
        //格式化xml,换行和缩进
        val prettyFormat = Format.getPrettyFormat()
//        prettyFormat.escapeStrategy = EscapeStrategy(function = { false })

        //取消trim
        prettyFormat.textMode = Format.TextMode.TRIM_FULL_WHITE
        //创建XMLOutputter对象
        val xmlOutputter = XMLOutputter(prettyFormat)
        //通过XMLOutputter将Document转换成xml文档
        xmlOutputter.output(document, FileOutputStream(File("jdomBooks.xml")))
    }
}

4. DOM4J方式

package imooc.write.toxml


import org.dom4j.DocumentHelper
import org.dom4j.io.OutputFormat
import org.dom4j.io.XMLWriter
import org.junit.Test
import java.io.File
import java.io.FileOutputStream

/**
 * @author futao
 * Created on 2017/11/6 - 17:10.
 * DOM4J方法生成xml
 * 个人觉得比较方便
 */
class DOM4J {
    @Test
    fun xml() {
        //创建xml对象
        val document = DocumentHelper.createDocument()
        //添加rss节点
        val rss = document.addElement("rss")
        //rss节点的version属性
        rss.addAttribute("version", "2.0")
        //生成子节点和子节点信息
        val channel = rss.addElement("channel")
        val title = channel.addElement("title")
        title.addText("国内新闻")
        val link = channel.addElement("link")
        link.addText(">><<http://www.baidu.com")
        val link2 = channel.addElement("link2")
//        link2.addCDATA(">><<http://www.baidu.com")
        //设置生成xml的格式,换行,缩进
        val prettyPrint = OutputFormat.createPrettyPrint()
        prettyPrint.encoding = "UTF-8"
        //生成xml文件
        val xmlWriter = XMLWriter(FileOutputStream(File("dom4jBooks.xml")), prettyPrint)
        //不转义
        xmlWriter.isEscapeText = false
        xmlWriter.write(document)
        xmlWriter.close()

    }
}
目录
相关文章
|
23天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
1月前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第30天】 随着Kotlin成为开发Android应用的首选语言,开发者社区对于其性能表现持续关注。本文通过深入分析与基准测试,探讨Kotlin与Java在Android平台上的性能差异,揭示两种语言在编译效率、运行时性能和内存消耗方面的具体表现,并提供优化建议。我们的目标是为Android开发者提供科学依据,帮助他们在项目实践中做出明智的编程语言选择。
|
1月前
|
Java
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
10 0
|
30天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
18 4
|
13天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
18天前
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
27 0
|
23天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
1月前
|
XML Java 数据格式
使用java解析XML文件的步骤
使用java解析XML文件的步骤
10 0
|
1月前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能对比
【2月更文挑战第28天】 在Android开发领域,Kotlin作为一种现代编程语言,逐渐取代了传统的Java语言。本文通过深入分析Kotlin和Java在Android平台上的性能差异,揭示两者在编译效率、运行速度以及内存消耗等方面的比较结果。我们将探讨Kotlin协程如何优化异步编程,以及Kotlin Extensions对提升开发效率的贡献。同时,文中还将介绍一些性能优化的实践技巧,帮助开发者在Kotlin环境下构建更加高效的Android应用。
|
24天前
|
数据库 Android开发 开发者
构建高效Android应用:Kotlin协程的实践指南
【4月更文挑战第2天】随着移动应用开发的不断进步,开发者们寻求更流畅、高效的用户体验。在Android平台上,Kotlin语言凭借其简洁性和功能性赢得了开发社区的广泛支持。特别是Kotlin协程,作为一种轻量级的并发处理方案,使得异步编程变得更加简单和直观。本文将深入探讨Kotlin协程的核心概念、使用场景以及如何将其应用于Android开发中,以提高应用性能和响应能力。通过实际案例分析,我们将展示协程如何简化复杂任务,优化资源管理,并为最终用户提供更加流畅的体验。