xml格式化 java_Java XML格式化程序

xml格式化 java_Java XML格式化程序xml格式化javaeXtensiveMarkupLanguage(XML)isoneofthepopularmediumformessagingandcommunicationbetweendifferentapplications.SinceXMLisopensourceandprovidescontroloverdataformatv…

大家好,又见面了,我是你们的朋友全栈君。

xml格式化 java

eXtensive Markup Language (XML) is one of the popular medium for messaging and communication between different applications. Since XML is open source and provides control over data format via DTD and XSDs, it’s widely used across technologies.

扩展标记语言(XML)是用于在不同应用程序之间进行消息传递和通信的流行媒介之一。 由于XML是开源的,并且可以通过DTD和XSD提供对数据格式的控制,因此XML在各种技术中得到了广泛使用。

Java XML格式化程序 (Java XML Formatter)

Few days back, I came across a situation where the third party API was returning Document object and XML message as String. So I wrote this simple XmlFormatter class to format the XML with proper indentation and convert Document object to XML String.

几天前,我遇到了这样一种情况,即第三方API正在将Document对象和XML消息返回为String。 因此,我编写了这个简单的XmlFormatter类,以使用适当的缩进来格式化XML,并将Document对象转换为XML String。

package com.journaldev.java.xmlutil;

import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;

/**
 * Utility Class for formatting XML
 * @author Pankaj
 *
 */
public class XmlFormatter {

	/**
	 *
	 * @param unformattedXml - XML String
	 * @return Properly formatted XML String
	 */
	public String format(String unformattedXml) {
		try {
			Document document = parseXmlFile(unformattedXml);

			OutputFormat format = new OutputFormat(document);
			format.setLineWidth(65);
			format.setIndenting(true);
			format.setIndent(2);
			Writer out = new StringWriter();
			XMLSerializer serializer = new XMLSerializer(out, format);
			serializer.serialize(document);

			return out.toString();
		} catch (IOException e) {
			e.printStackTrace();
			return "";
		}

	}

	/**
	 * This function converts String XML to Document object
	 * @param in - XML String
	 * @return Document object
	 */
	private Document parseXmlFile(String in) {
		try {
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			InputSource is = new InputSource(new StringReader(in));
			return db.parse(is);
		} catch (ParserConfigurationException e) {
			throw new RuntimeException(e);
		} catch (SAXException e) {
			throw new RuntimeException(e);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * Takes an XML Document object and makes an XML String. Just a utility
	 * function.
	 *
	 * @param doc - The DOM document
	 * @return the XML String
	 */
	public String makeXMLString(Document doc) {
		String xmlString = "";
		if (doc != null) {
			try {
				TransformerFactory transfac = TransformerFactory.newInstance();
				Transformer trans = transfac.newTransformer();
				trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
				trans.setOutputProperty(OutputKeys.INDENT, "yes");
				StringWriter sw = new StringWriter();
				StreamResult result = new StreamResult(sw);
				DOMSource source = new DOMSource(doc);
				trans.transform(source, result);
				xmlString = sw.toString();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return xmlString;
	}
	public static void main(String args[]){
		XmlFormatter formatter = new XmlFormatter();
		String book = "<?xml version=\"1.0\"?><catalog><book id=\"bk101\"><author>Gambardella, Matthew</author><title>XML Developers Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date><description>An in-depth look at creating applications with XML.</description></book><book id=\"bk102\"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date><description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description></book></catalog>";
		System.out.println(formatter.format(book));
	}
}

To use this class, you need Apache xercesImpl.jar that you can download from their website.

要使用此类,您需要Apache xercesImpl.jar ,您可以从其网站下载该类。

Output of the above class is a properly formatted XML String:

上面类的输出是格式正确的XML字符串:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developers Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
    <description>An in-depth look at creating applications with XML.</description>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-12-16</publish_date>
    <description>A former architect battles corporate zombies, an evil
      sorceress, and her own childhood to become queen of the world.</description>
  </book>
</catalog>

I hope you will find this utility class helpful in formatting XML in Java and converting XML to Document and vice versa.

我希望您会发现该实用程序类有助于在Java中格式化XML并将XML转换为Document,反之亦然。

更新资料 (Update)

It’s been many years since I wrote this article, java has evolved a lot and we can format XML string easily using javax.xml.transform API.

自从我写这篇文章以来已经有很多年了,java已经发展了很多,我们可以使用javax.xml.transform API轻松格式化XML字符串。

package com.journaldev.java.xmlutil;

import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

/**
 * Utility Class for formatting XML
 * 
 * @author Pankaj
 *
 */
public class XmlFormatter {

	public String format(String input) {
		return prettyFormat(input, "2");
	}

	public static String prettyFormat(String input, String indent) {
		Source xmlInput = new StreamSource(new StringReader(input));
		StringWriter stringWriter = new StringWriter();
		try {
			TransformerFactory transformerFactory = TransformerFactory.newInstance();
			Transformer transformer = transformerFactory.newTransformer();
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "yes");
			transformer.setOutputProperty("{https://xml.apache.org/xslt}indent-amount", indent);
			transformer.transform(xmlInput, new StreamResult(stringWriter));

			return stringWriter.toString().trim();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public static void main(String args[]) {
		XmlFormatter formatter = new XmlFormatter();
		String book = "<?xml version=\"1.0\"?><catalog><book id=\"bk101\"><author>Gambardella, Matthew</author><title>XML Developers Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date><description>An in-depth look at creating applications with XML.</description></book><book id=\"bk102\"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date><description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description></book></catalog>";
		System.out.println(formatter.format(book));
	}
}

The output will be the same as earlier, you should use this instead of adding a dependency on any third party API.

输出将与之前的输出相同,您应该使用此输出,而不是添加对任何第三方API的依赖关系。

GitHub Repository.
GitHub Repository下载示例代码。

翻译自: https://www.journaldev.com/71/java-xml-formatter

xml格式化 java

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160132.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C++ vector初始化_vector初始化大小

    C++ vector初始化_vector初始化大小一维向量vector<int>vector_1D_1;//只定义向量vector<int>vector_1D_2(n);//定义的同时初始化大小vector<int>vector_1D_3(n,m);//定义的同时初始化大小为n,元素初始值为m//先定义变量,再初始化大小和初值vector<int>vector_1D_4;vector_1D_4=vector<int>(n,m);二维向量vector<vector&

    2026年1月18日
    4
  • python字符串的使用方法_python输入字符串str

    python字符串的使用方法_python输入字符串strpython字符串常用方法find(sub[,start[,end]])在索引start和end之间查找字符串sub​找到,则返回最左端的索引值,未找到,则返回-1​start和end都可

    2022年7月28日
    3
  • 各大型邮箱smtp服务器及端口收集

    各大型邮箱smtp服务器及端口收集

    2021年9月21日
    106
  • zigbee开发板(nxpzigbee开发)

    前面我们搭建好了zigbee开发的硬件平台,买一块开发板,注意只要这块开发板上有cc2530,可以向里面烧录程序就可以了。具体的烧录过程我会最近上传我的烧录过程,相关软件我尽快上传。好了回归这一次的主题,那么我们到底需要什么样的开发环境呢?这完全取决于你的项目大小,如果你的项目只是学会使用zigbee,那么你只需要一款烧录软件,以及一款合适的用于编写cc2530的c编译器就OK了。但是我这

    2022年4月10日
    58
  • 密码学的基础知识_密码学的基本概念

    密码学的基础知识_密码学的基本概念最近在研究密码学加密,签名方面的东西。经过几天的学习对一些基础知识进行一下整理PKI:PKI是PublicKeyInfrastructure的首字母缩写,翻译过来就是公钥基础设施,在X509标准

    2022年8月4日
    9
  • 万能模拟器eve-ng介绍[通俗易懂]

    万能模拟器eve-ng介绍[通俗易懂]作为一名网络工程师,通过模拟器来搭建实验环境是必不可少的,主流的网络模拟器有如下几款:PacketTracer是思科公司出的一款模拟器,只能模拟思科自己的设备,由于此款软件是纯软件模拟,所以思科设备的很多特性模拟的不是很好,可以应付CCNA的实验,只适合入门,再复杂点的环境就要找其他模拟器了。Dynamips是一个基于虚拟化的模拟器,用于模拟思科的路由器,中国大神-小凡通过添加GUI用户界面开发…

    2022年5月18日
    133

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号