Java解析或生成xml字符串的各种方法,一文都告诉你

//读取XML文件,获得document对象.

SAXReader reader = new SAXReader();

org.dom4j.Document document = reader.read(new File(“input.xml”));

DOM4J生成xml格式的字符串


我们除了可以使用Dom4j解析xml格式字符串之外,我们还可以使用Domj来生成xml格式的字符串,这在我们构造XML格式的请求参数的时候是非常有用的。

<?xml version="1.0" encoding="UTF-8"?>

xxx

yyy

比如我们想生成上面的xml字符串,那么可以使用以下方法

/**

  • 生成xml格式的字符串

  • @return

*/

public static String createXmlString(){

//创建document对象

org.dom4j.Document document = DocumentHelper.createDocument();

//设置编码

document.setXMLEncoding(“UTF-8”);

//创建根节点

Element requestData = document.addElement(“requestData”);

//在根节点加入username子节点

Element username = requestData.addElement(“username”);

//往子节点添加内容

username.setText(“xxx”);

//加入password子节点

Element password = requestData.addElement(“password”);

//添加内容

password.setText(“yyy”);

//将document对象转换成字符串

String xml = document.asXML();

System.out.println(xml);

return xml;

}

输出:

<?xml version="1.0" encoding="UTF-8"?>

xxxyyy

说明:

//通过这句定义一个XML文档对象

Document document = DocumentHelper.createDocument();

//通过这句定义一个XML元素,这里添加的是根节点

Element requestData = document.addElement("requestData ");

Element有几个重要的方法:

addComment:添加注释

addAttribute:添加属性

addElement:添加子元素

setText:设置节点的内容

注:setText和addAttribute是不一样的效果

例:

username.addAttribute(“username”,“xxx”);

生成的格式如下:

addAttribute是在节点添加一个属性,而不是添加节点内容,这要注意

二、使用JDK的org.w3c.dom.Document解析xml字符串


方法一需要我们添加依赖,如果想不添加依赖,我们可以直接使用JDK的org.w3c.dom.Document进行解析

下面我就使用org.w3c.dom.Document来解析下开头的xml字符串

实例如下:

/**

  • 使用org.w3c.dom.Document来解析xml字符串

*/

public static void parseXmlString() throws ParserConfigurationException, IOException, SAXException {

//创建DOM解析器的工厂实例

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

//从DOM工厂中获取解析器

DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

//使用解析器生成Document实例

Document document = documentBuilder.parse(new InputSource(new StringReader(xmlString)));

//获取responsedata元素的节点列表

NodeList responsedata = document.getElementsByTagName(“responsedata”);

//遍历该节点列表

for (int i=0; i< responsedata.getLength();i++){

//获取具体的元素

org.w3c.dom.Element node = (org.w3c.dom.Element) responsedata.item(i);

//输出值

System.out.println(“resultcode:”+node.getElementsByTagName(“resultcode”).item(0).getFirstChild().getNodeValue());

System.out.println(“resultdesc:”+node.getElementsByTagName(“resultdesc”).item(0).getFirstChild().getNodeValue());

}

}

注意:DOM解析的数据是保留在内存中的,这方便我们修改,但同时如果xml文件比较大的时候,占用的内存也会较大,可能会造成内存溢出

org.w3c.dom.Document生成xml字符串


实例:

/**

  • 使用org.w3c.dom.Document来生成xml字符串

*/

public static String createXmlStr(){

String xmlString = “”;

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

try {

DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

//使用解析器生成Document实例

Document document = documentBuilder.newDocument();

//设置版本号

document.setXmlVersion(“1.0”);

//创建父元素

org.w3c.dom.Element requesData = document.createElement(“requesData”);

//创建子元素

org.w3c.dom.Element username = document.createElement(“username”);

//添加元素内容

username.setTextContent(“xxx”);

org.w3c.dom.Element password = document.createElement(“password”);

password.setTextContent(“yyy”);

//将子元素添加到父元素

requesData.appendChild(username);

requesData.appendChild(password);

//将父元素添加到Document

document.appendChild(requesData);

//创建转换器实例

TransformerFactory transFactory = TransformerFactory.newInstance();

Transformer transformer = transFactory.newTransformer();

//设置输出的编码

transformer.setOutputProperty(OutputKeys.ENCODING, “UTF-8”);

//是否可以在输出结果树时添加额外的空格

transformer.setOutputProperty(OutputKeys.INDENT, “yes”);

// xml转换String

DOMSource domSource = new DOMSource(document);

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

transformer.transform(domSource,new StreamResult(byteArrayOutputStream));

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

面试了阿里,滴滴,网易,蚂蚁,最终有幸去了网易【面试题分享】

ransformer.transform(domSource,new StreamResult(byteArrayOutputStream));

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

[外链图片转存中…(img-VHUJphcI-1714137775520)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值