//读取XML文件,获得document对象.
SAXReader reader = new SAXReader();
org.dom4j.Document document = reader.read(new File(“input.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字符串
*/
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)]