kotlin/java生成xml

简介: kotlin/java生成xml

四种方式


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


相关文章
|
2月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
使用Java和XPath在XML文档中精准定位数据
|
2月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
80 1
|
4月前
|
XML Java 数据格式
必知的技术知识:java基础73dom4j修改xml里面的内容(网页知识)
必知的技术知识:java基础73dom4j修改xml里面的内容(网页知识)
32 1
|
2天前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
17 4
|
3天前
|
XML JavaScript Java
java与XML文件的读写
java与XML文件的读写
13 3
|
4月前
|
XML Java 数据格式
java修改XML
java修改XML
|
2月前
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
55 1
|
2月前
|
XML 存储 JavaScript
在 Java 中如何将 ArrayList 转换为 XML
【8月更文挑战第23天】
14 3
|
2月前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
57 0
|
2月前
|
XML 自然语言处理 Java
Java 中的 XML 数据绑定
【8月更文挑战第22天】
18 0