网站建设宣传广告语沧州百度建设网站

当前位置: 首页 > news >正文

网站建设宣传广告语,沧州百度建设网站,建立了公司网站,营销号煽动民族情绪List item 文章目录 Java中操作Xml使用备忘1. Hutool中XmlUtil的使用简介2. Hutool中XmlUtil快速读取Xml字符串某个节点值 [简单取值时#xff0c;推荐使用]2-1 Hutool工具包Maven依赖和测试Xml字符串如下2-2 读取Xml中的节点message的值 3. Hutool中XmlUtil详细操作示… List item 文章目录 Java中操作Xml使用备忘1. Hutool中XmlUtil的使用简介2. Hutool中XmlUtil快速读取Xml字符串某个节点值 [简单取值时推荐使用]2-1 Hutool工具包Maven依赖和测试Xml字符串如下2-2 读取Xml中的节点message的值 3. Hutool中XmlUtil详细操作示例3-1 Xml示例字符串如下3-2 查询标签内的属性3-3 查询一对标签中的文本3-4 查询Xml后再新增一个标签并赋值3-5 修改一个标签数据 4 依赖Hutool再次封装的工具类XmlUtil实现xml-map、map-xml、xml-json功能4-1 需要添加的依赖4-2 工具类XmlUtil代码4-2-1 用到的一个枚举XmlSort如下4-2-2 XmlUtil.java如下 5 JavaBean与Xml互转_使用XStream实现很实用 [强烈推荐使用]5-1 引入XStream依赖5-2 工具类XStreamXmlBeanUtil5-3 使用实例 Java中操作Xml使用备忘

  1. Hutool中XmlUtil的使用简介

    说明1 XmlUtil只是w3c dom的简单工具化封装减少操作dom的难度

    # 如果项目对XML依赖较大依旧推荐Dom4j框架

    说明2JDK已经封装有XML解析和构建工具w3c dom

    # Hutool中XmlUtil简化XML的创建、读、写

  2. 读取XML读取XML分为两个方法XmlUtil.readXML 读取XML文件XmlUtil.parseXml 解析XML字符串为Document对象2. 写XMLXmlUtil.toStr 将XML文档转换为StringXmlUtil.toFile 将XML文档写入到文件3. 创建XMLXmlUtil.createXml 创建XML文档, 创建的XML默认是utf8编码修改编码的过程是在toStr和toFile方法里既XML在转为文本的时候才定义编码。4. XML读取操作通过以下工具方法可以完成基本的节点读取操作。XmlUtil.cleanInvalid 除XML文本中的无效字符XmlUtil.getElements 根据节点名获得子节点列表XmlUtil.getElement 根据节点名获得第一个子节点XmlUtil.elementText 根据节点名获得第一个子节点XmlUtil.transElements 将NodeList转换为Element列表5. XML与对象转换writeObjectAsXml 将可序列化的对象转换为XML写入文件已经存在的文件将被覆盖。readObjectFromXml 从XML中读取对象。注意 这两个方法严重依赖JDK的XMLEncoder和XMLDecoder生成和解析必须成对存在遵循固定格式普通的XML转Bean会报错。6. Xpath操作createXPath 创建XPathgetByXPath 通过XPath方式读取XML节点等信息2. Hutool中XmlUtil快速读取Xml字符串某个节点值 [简单取值时推荐使用] 2-1 Hutool工具包Maven依赖和测试Xml字符串如下 !– 引入Hutool的Maven依赖 – dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.16/version /dependency!– 下方测试用的Xml字符串 – ?xml version1.0 encodingutf-8? returnsms returnstatusSuccess成功/returnstatus messageok/message remainpoint1490/remainpoint taskID885/taskID successCounts1/successCounts /returnsms2-2 读取Xml中的节点的值 Document docResultXmlUtil.readXML(xmlFile); // 结果为“ok” Object value XmlUtil.getByXPath(//returnsms/message, docResult, XPathConstants.STRING);// 说明Element对象目前仅能支持一层一层的向下解析所以请不要跳级去做查询 // 否则会报null。如果想直接获取到某个标签的文本在有准确定位的情况下 // 可以直接写出路径获取 // 但是如果该层级存在相同的标签则只获取第一个标签的数据。 String xmlDataxml字符串; Document document XmlUtil.parseXml(xmlData); //获得XML文档根节点 Element elementGXmlUtil.getRootElement(document); //通过固定路径获取到数据 Object bString XmlUtil.getByXPath(//root/base/message/event_no, document, XPathConstants.STRING); System.out.println(event_no元素节点值bString);

  3. Hutool中XmlUtil详细操作示例 3-1 Xml示例字符串如下 forms version2.1formExportsummary id1132755668421070367 nameformmain_0031/definitionscolumn idfield0001 type0 namefield1 length255/column idfield0002 type0 namefield2 length256//definitionsvaluescolumn namefield1value建行一世/value/columncolumn namefield2value中国人民/value/column/valuessubForms//formExport /forms 3-2 查询标签内的属性 // 例 获取definitions标签中第一个标签column 属性length的值String xmlData上面规定的xml字符串; // 测试时自己替换下 Document document XmlUtil.parseXml(xmlData); //获得XML文档根节点 Element elementGXmlUtil.getRootElement(document); //打印节点名称 System.out.println(elementG.getTagName()); //获取下层节点该方法默认取第一个 Element elementZXmlUtil.getElement(elementG,formExport); System.out.println(elementZ.getTagName()); //获取下层节点该方法默认取第一个 Element elementZ1XmlUtil.getElement(elementZ,definitions); System.out.println(elementZ1.getTagName()); //获取下层节点该方法默认取第一个 Element elementZ2XmlUtil.getElement(elementZ1,column); System.out.println(elementZ2.getTagName());//读取属性length System.out.println(elementZ2.getAttribute(length));3-3 查询一对标签中的文本 // 例获取values标签中第一个标签column下的value所包含的文本可直接看最后一行// 以下内容同3-2内容开始 String xmlData上面规定的xml字符串; Document document XmlUtil.parseXml(xmlData); //获得XML文档根节点 Element elementGXmlUtil.getRootElement(document); //获取下层节点该方法默认取第一个 Element elementZXmlUtil.getElement(elementG,formExport); //获取下层节点该方法默认取第一个 Element elementZ_1XmlUtil.getElement(elementZ,values); //获取下层节点该方法默认取第一个 Element elementZ_2XmlUtil.getElement(elementZ_1,column); // 以上内容同3-2内容结束//获取到所有子标签 // Value返回的时NodeList遍历获取即可 NodeList nodeListelementZ_2.getElementsByTagName(value); for (int i 0; i nodeList.getLength() ; i) {//打印标签的文本System.out.println(nodeList.item(i).getTextContent()); }3-4 查询Xml后再新增一个标签并赋值 // 例给values标签中第一个标签column下再度添加一个value标签所包含的文本为从零开始// 以下内容同3-2内容开始 String xmlData上面规定的xml字符串; Document document XmlUtil.parseXml(xmlData); //获得XML文档根节点 Element elementGXmlUtil.getRootElement(document); //获取下层节点该方法默认取第一个 Element elementZXmlUtil.getElement(elementG,formExport); //获取下层节点该方法默认取第一个 Element elementZ_1XmlUtil.getElement(elementZ,values); //获取下层节点该方法默认取第一个 Element elementZ_2XmlUtil.getElement(elementZ_1,column); // 以上内容同3-2内容结束//创建一个标签 Element elementItem document.createElement(value); //赋值 elementItem.setTextContent(从零开始); //放到某个标签下面 elementZ_2.appendChild(elementItem); //获取到所有子标签 NodeList nodeListelementZ_2.getElementsByTagName(value); for (int i 0; i nodeList.getLength() ; i) {//打印标签的文本System.out.println(nodeList.item(i).getTextContent()); } System.out.println(XmlUtil.toStr(document));// 打印的结果 在value建行一世/value后新增了一个value从零开始/value3-5 修改一个标签数据 // 例给values标签中第一个标签column下的第一个value标签修改成张三丰// 以下内容同3-2内容开始 String xmlData上面规定的xml字符串; Document document XmlUtil.parseXml(xmlData); //获得XML文档根节点 Element elementGXmlUtil.getRootElement(document); //获取下层节点该方法默认取第一个 Element elementZXmlUtil.getElement(elementG,formExport); //获取下层节点该方法默认取第一个 Element elementZ_1XmlUtil.getElement(elementZ,values); //获取下层节点该方法默认取第一个 Element elementZ_2XmlUtil.getElement(elementZ_1,column); // 以上内容同3-2内容结束//获取到所有子标签 NodeList nodeListelementZ_2.getElementsByTagName(value); //第一次打印 for (int i 0; i nodeList.getLength() ; i) {//打印标签的文本System.out.println(nodeList.item(i).getTextContent()); } //修改 for (int i 0; i nodeList.getLength() ; i) {// ******************* 这里进行修改 *****************nodeList.item(i).setTextContent(张三丰); } //第二次打印 for (int i 0; i nodeList.getLength() ; i) {//打印标签的文本System.out.println(nodeList.item(i).getTextContent()); } // 打印输出结果 // 第一次打印输出为 建行一世 // 第二次打印输出为 张三丰4 依赖Hutool再次封装的工具类XmlUtil实现xml-map、map-xml、xml-json功能 // 作用 // 1.xml转map // 2.xml转json // 3.map转xml4-1 需要添加的依赖 dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.7.15/version /dependencydependencygroupIdorg.dom4j/groupIdartifactIddom4j/artifactIdversion2.1.3/version /dependency4-2 工具类XmlUtil代码 4-2-1 用到的一个枚举XmlSort如下 import java.util.HashMap; import java.util.LinkedHashMap;/ xml解析顺序是否有序* author ASen/public enum XmlSort{/** 有序/SORT(LinkedHashMap.class,有序),/** 无序/NO_SORT(HashMap.class,无序);/** 创建的map字节码对象/private final Class? mapClass;/** 顺序名称/private final String message ;XmlSort(Class? mapClass, String message) {this.mapClass mapClass;this.message message;}public Class? getMapClass() {return mapClass;}public String getMessage() {return message;} }4-2-2 XmlUtil.java如下 package com.asen.demo.util;import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.asen.demo.constant.XmlSort; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.tree.DefaultDocument; import org.dom4j.tree.DefaultElement;import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map;/** xml解析帮组类* author asen* date 2022/1/10 15:17/ public class XmlUtil {/** 标签属性/private final static String TAG_ATTR attr;/** 创建的map类型/private XmlSort xmlSort XmlSort.NO_SORT;/** map to xml* param map map对象* return xml 字符串/public String mapToXml(MapString,Object map) {if(map.size() ! 1){throw new RuntimeException(map根节点长度不为1);}String key ;for (String str : map.keySet()) {key str ;}// 创建根节点Element rootElement new DefaultElement(key);Document document new DefaultDocument(rootElement);Element node document.getRootElement();Object obj map.get(key);// 断言Assert.isAssignable(Map.class,obj.getClass());mapNodes(node,(MapString, Object)obj);return document.asXML();}/** 父类节点已经创建 map 包含父类* param node node* param map map/public void mapNodes(Element node, MapString, Object map) {map.forEach((k,v)-{Object obj map.get(k);// 给当前父类添加属性if(TAG_ATTR.equals(k)){Assert.isAssignable(Map.class,obj.getClass());MapString,Object tagMap (MapString,Object) obj;tagMap.forEach((tagKey,tagValue)-{node.addAttribute(tagKey, (String) tagValue);});return ;}if(obj instanceof Map){Element newElement node.addElement(k);// map 处理MapString,Object childMap (MapString,Object) obj;mapNodes(newElement,childMap);}else if (obj instanceof String){Element newElement node.addElement(k);newElement.setText((String) v);} else if (obj instanceof List) {ListMapString, Object list (ListMapString, Object) obj;list.forEach(itemMap-{Element newElement node.addElement(k);mapNodes(newElement,itemMap);});}});}/** 读取xml文件返回json字符串** param fileName 文件路径* return json字符串* throws DocumentException 异常/public String xmlToJson(String fileName) throws DocumentException {MapString, Object xmlMap xmlToMap(fileName);return JSONUtil.toJsonStr(xmlMap);}/** 读取xml文件返回map对象** param fileName 文件路径* return map对象* throws DocumentException 异常/public MapString, Object xmlToMap(String fileName) throws DocumentException {// 创建saxReader对象SAXReader reader new SAXReader();// 通过read方法读取一个文件 转换成Document对象Document document reader.read(new File(fileName));//获取根节点元素对象Element node document.getRootElement();//遍历所有的元素节点MapString, Object map getNewMap();// 处理节点listNodes(node, map);return map;}/** 遍历当前节点元素下面的所有(元素的)子节点** param node node/public void listNodes(Element node, MapString, Object map) {MapString, Object xiaoMap getNewMap();String nodeKey node.getName();// 获取当前节点的所有属性节点ListAttribute list node.attributes();// 遍历属性节点MapString, Object attrMap getNewMap();for (Attribute attr : list) {attrMap.put(attr.getName(), attr.getValue());}if (ObjectUtil.isNotEmpty(attrMap)) {xiaoMap.put(TAG_ATTR, attrMap);}// 当前节点下面子节点迭代器IteratorElement it node.elementIterator();if (!(.equals(node.getTextTrim())) || !it.hasNext()) {map.put(nodeKey, node.getTextTrim());}else{// 不为空if (ObjectUtil.isEmpty(map.get(nodeKey))) {map.put(nodeKey, xiaoMap);} else {ListMapString, Object childList null;// 获取原来的Object obj map.get(nodeKey);if (obj instanceof Iterable) {// 非第一个childList (ListMapString, Object) obj;childList.add(xiaoMap);} else if (obj instanceof Map) {// 第一个MapString, Object childMap (MapString, Object) obj;childList new ArrayList();childList.add(childMap);childList.add(xiaoMap);}// 添加新的map.put(nodeKey, childList);}}// 遍历while (it.hasNext()) {// 获取某个子节点对象Element e it.next();// 对子节点进行遍历listNodes(e, xiaoMap);}}/** 获取一个新的map对象** return map对象/private MapString, Object getNewMap() {Object obj null;try {obj xmlSort.getMapClass().newInstance();if (obj instanceof Map) {return (MapString, Object) obj;}} catch (InstantiationException | IllegalAccessException e) {e.printStackTrace();}return null;}/** 设置是否排序** param xmlSort 是否排序对象/public void setXmlSort(XmlSort xmlSort) {this.xmlSort xmlSort;} }5 JavaBean与Xml互转_使用XStream实现很实用 [强烈推荐使用] 说明 相对于JAXBXStream更简洁一些。 常用注解 XStreamAlias定义xml节点名 5-1 引入XStream依赖 dependencygroupIdcom.thoughtworks.xstream/groupIdartifactIdxstream/artifactIdversion1.4.19/version /dependency5-2 工具类XStreamXmlBeanUtil import com.thoughtworks.xstream.XStream;/** XStream 实现bean与xml之间相互转换/ public class XStreamXmlBeanUtil {/** JavaBean转XML* param bean - JavaBean* return - XML/public static String toXml(Object bean) {return initXStream(bean.getClass()).toXML(bean);}/** XML转JavaBean* param xml - XML* param beanClazz - JavaBean Class* param T* return - JavaBean/SuppressWarnings(unchecked)public static T T fromXml(String xml, ClassT beanClazz) {return (T) initXStream(beanClazz).fromXML(xml);}private static XStream initXStream(Class? beanClazz) {XStream x new XStream();x.registerConverter(new DateConverter(yyyy-MM-dd HH:mm:ss, null,TimeZone.getTimeZone(GMT8)));//不使用默认的类加载器需要手动设置类加载器x.setClassLoader(beanClazz.getClassLoader());x.processAnnotations(beanClazz);x.allowTypesByRegExp(new String[]{.});// 开起注解功能x.autodetectAnnotations(true);// 忽律未知字段x.ignoreUnknownElements();return x;} }5-3 使用实例 import com.thoughtworks.xstream.annotations.XStreamAlias; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;public class Test {public static void main(String[] args) {// 1. 普通bean与Xml互转User user new User(貂蝉, 18, 女);System.out.println(普通bean转Xml);String xml XStreamXmlBeanUtil.toXml(user);System.out.println(xml);System.out.println(Xml转普通bean);System.out.println(XStreamXmlBeanUtil.fromXml(xml, User.class));// 2. 继承bean与Xml互转Child child new Child(吃糖葫芦);child.setName(葫芦娃);child.setAge(2);child.setGender(男);child.setHobby(打游戏);System.out.println(继承bean转Xml);xml XStreamXmlBeanUtil.toXml(child);System.out.println(xml);System.out.println(Xml转继承bean);// 生成的Xml仅有Child的属性hobby但转后后的Child对象父属性都是有值的System.out.println(XStreamXmlBeanUtil.fromXml(xml, Child.class)); System.out.println(Xml转继承bean测试转换后父属性、自身属性是否有值);Child c2 XStreamXmlBeanUtil.fromXml(xml, Child.class);System.out.println( 11111 c2.getName() c2.getGender() c2.getHobby());// 输出内容如下// 普通bean转Xml// Women// name貂蝉/name// age18/age// gender女/gender// /Women// Xml转普通bean// XmlTest.User(name貂蝉, age18, gender女)// 继承bean转Xml// User// name葫芦娃/name// age2/age// gender男/gender// hobby打游戏/hobby// /User// Xml转继承bean// XmlTest.Child(hobby打游戏)// 11111葫芦娃男打游戏 } }Data NoArgsConstructor AllArgsConstructor XStreamAlias(Women) class User {private String name;private int age;private String gender; }NoArgsConstructor AllArgsConstructor Data XStreamAlias(User) class Child extends User {private String hobby; }