温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在java中操作xml

发布时间:2021-05-21 16:28:37 来源:亿速云 阅读:352 作者:Leah 栏目:编程语言

本篇文章为大家展示了如何在java中操作xml,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一丶常用方法

主要有3个方面, 1读取xml文件, 2使用xpath根据指定路径获取某一节点数据 3, xml和java bean的转换

XmlUtils.java

public class XmlUtils {   // --------------------------------------   public static Document createXml(){     return XmlUtil.createXml();   }   // --------------------------------------   /**    * 读取xml文档    * @param xmlInputStream    * @return    */   public static Document readXml(InputStream xmlInputStream){     return readXml(xmlInputStream, false);   }   public static Document readXml(InputStream xmlInputStream, boolean validate){ // 参考mybatis parsing模块     try {       DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();       factory.setValidating(validate);       factory.setNamespaceAware(false);       factory.setIgnoringComments(true);       factory.setIgnoringElementContentWhitespace(false);       factory.setCoalescing(false);       factory.setExpandEntityReferences(true);       DocumentBuilder builder=factory.newDocumentBuilder();       return builder.parse(xmlInputStream);     } catch (ParserConfigurationException e) {       throw new RuntimeException(e);     } catch (SAXException e) {       throw new RuntimeException(e);     } catch (IOException e) {       throw new RuntimeException(e);     }   }   public static Document readXml(String xmlStr){     return XmlUtil.parseXml(xmlStr); //使用hutool   }   // --------------------------------------   // 根据路径获取某一节点   public static XPath newXpath(){     return XPathFactory.newInstance().newXPath();   }   /**    * 根据路径获取某一节点, 语法看 https://www.w3school.com.cn/xpath/xpath_syntax.asp    * @param expression    * @param root 可以是document, 可以是Node等其他节点    * @param xpath    * @return 返回的节点可以修改    */   public static Node evalNode(String expression, Object root, XPath xpath){     return (Node)evaluate(expression, root, XPathConstants.NODE, xpath);   }   public static NodeList evalNodeList(String expression, Object root, XPath xpath){     return (NodeList)evaluate(expression, root, XPathConstants.NODESET, xpath);   }   public static Double evalDouble(String expression, Object root, XPath xpath) {     return (Double) evaluate(expression, root, XPathConstants.NUMBER, xpath);   }   public static Boolean evalBoolean(String expression, Object root, XPath xpath) {     return (Boolean) evaluate(expression, root, XPathConstants.BOOLEAN, xpath);   }   public static String evalString(String expression, Object root, XPath xpath) {     return (String) evaluate(expression, root, XPathConstants.STRING, xpath);   }   public static Long evalLong(String expression, Object root, XPath xpath){     return Long.valueOf(evalString(expression, root, xpath));   }   public static Integer evalInteger(String expression, Object root, XPath xpath){     return Integer.valueOf(evalString(expression, root, xpath));   }   public static Float evalFloat(String expression, Object root, XPath xpath){     return Float.valueOf(evalString(expression, root, xpath));   }   public static Short evalShort(String expression, Object root, XPath xpath){     return Short.valueOf(evalString(expression, root, xpath));   }   private static Object evaluate(String expression, Object root, QName returnType, XPath xpath) {     try {       return xpath.evaluate(expression, root, returnType);     } catch (Exception e) {       throw new RuntimeException("Error evaluating XPath. Cause: " + e, e);     }   }   // --------------------------------------   // 转成string   public static String toStr(Node node){     return toStr(node, false);   }   public static String toStr(Node node, boolean isPretty){     return toStr(node, "utf-8", isPretty);   }   /**    *    * @param node    * @param charset 编码    * @param isPretty 是否格式化输出    * @return    */   public static String toStr(Node node, String charset, boolean isPretty){     final StringWriter writer = StrUtil.getWriter();     final int INDENT_DEFAULT=2;     try {       XmlUtil.transform(new DOMSource(node), new StreamResult(writer), charset, isPretty ? INDENT_DEFAULT : 0);     } catch (Exception e) {       throw new UtilException(e, "Trans xml document to string error!");     }     return writer.toString();   }   //----------------------------------------   // 和java bean转换   public static JSONObject toJSONObject(String xmlStr){     return XML.toJSONObject(xmlStr);   }   public static JSONObject toJSONObject(Node node){     String xmlStr=toStr(node);     return toJSONObject(xmlStr);   }   public static <T> T toBean(Node node, Class<T> clazz){     return toJSONObject(node).toBean(clazz);   }   public static Node toNode(Object obj){     String xml=toXml(obj);     Node rootNode=readXml(xml).getFirstChild();     return rootNode;   }   public static String toXml(Object obj){     return XML.toXml(obj);   } }

二丶测试

@Test   public void readXmlFromInputStreamTest(){     BufferedInputStream bis=FileUtil.getInputStream("xml/bookstore.xml");     Document document=XmlUtils.readXml(bis);     String nodeName=document.getFirstChild().getNodeName();     System.out.println(nodeName);     Assert.assertTrue(nodeName.equals("bookstore"));   }   @Test   public void readXmlStringTest() throws IOException {     BufferedInputStream bis=FileUtil.getInputStream("xml/bookstore.xml");     String xmlStr=StreamUtils.copyToString(bis, Charset.defaultCharset());     Document document=XmlUtils.readXml(xmlStr);     String nodeName=document.getFirstChild().getNodeName();     System.out.println(nodeName);     Assert.assertTrue(nodeName.equals("bookstore"));   }   // -------------------------------------------- xpath   /*   https://www.w3school.com.cn/xpath/xpath_syntax.asp   nodename   选取此节点的所有子节点。   /   从根节点选取。   //   从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。   .   选取当前节点。   ..   选取当前节点的父节点。   @   选取属性。    */   @Test   public void evalNodeTest(){     BufferedInputStream bis=FileUtil.getInputStream("xml/bookstore.xml");     Document document=XmlUtils.readXml(bis);     XPath xpath=XmlUtils.newXpath();     // 1. 使用xpath表达式读取根节点     Node rootNode=XmlUtils.evalNode("/bookstore", document, xpath);     Assert.assertEquals("bookstore", rootNode.getNodeName());     // 2. 使用xpath表达式读取nodeList     NodeList bookNodeList =XmlUtils.evalNodeList("/bookstore/book", document, xpath);     Node bookNode=null;     for(int i=0; i<bookNodeList.getLength(); i++){       bookNode=bookNodeList.item(i);       Assert.assertEquals("book", bookNode.getNodeName());     }     // 3. 使用xpath表达式从节点读取nodeList     bookNodeList=XmlUtils.evalNodeList("/book", rootNode, xpath);     for(int i=0; i<bookNodeList.getLength(); i++){       bookNode=bookNodeList.item(i);       Assert.assertEquals("book", bookNode.getNodeName());     }     // 4. 使用xpath表达式读取属性 数组表达式从1开始, /@ 修饰获取属性     String lang=XmlUtils.evalString("/bookstore/book[1]/title/@lang", document, xpath);     Assert.assertEquals("en", lang);     lang=XmlUtils.evalString("/bookstore/book[2]/title/@lang", document, xpath);     Assert.assertEquals("cn", lang);   }   // --------------------------------- 转换   @Test   public void xmlToJSONObjectTest() throws IOException {     BufferedInputStream bis=FileUtil.getInputStream("xml/bookstore.xml");     String xmlStr=StreamUtils.copyToString(bis, Charset.forName("utf-8"));     JSONObject jso=XmlUtils.toJSONObject(xmlStr);     Assert.assertTrue(jso.getJSONObject("bookstore")!=null);     Assert.assertTrue(jso.getJSONObject("bookstore").getJSONArray("book")!=null);   }   @Test   public void nodeToJSONObjectTest(){     BufferedInputStream bis=FileUtil.getInputStream("xml/bookstore.xml");     Document document=XmlUtils.readXml(bis);     JSONObject jso=XmlUtils.toJSONObject(document);     Assert.assertTrue(jso.getJSONObject("bookstore")!=null);     Assert.assertTrue(jso.getJSONObject("bookstore").getJSONArray("book")!=null);   }   @Test   public void toBeanTest(){     BufferedInputStream bis=FileUtil.getInputStream("xml/bookstore.xml");     Document document=XmlUtils.readXml(bis);     XmlBookstoreDto dto=XmlUtils.toBean(document, XmlBookstoreDto.class);     Bookstore bookstore=dto.getBookstore();     Assert.assertNotNull(bookstore);     List<Book> bookList=bookstore.getBook();     Book book1=bookList.get(0);     Assert.assertTrue(book1.getTitle().getLang().equals("en"));     Assert.assertTrue(book1.getTitle().getContent().equals("Harry Potter"));     Assert.assertTrue(book1.getAuthor().equals("J K. Rowling"));     Book book2=bookList.get(1);     Assert.assertTrue(book2.getTitle().getLang().equals("cn"));     Assert.assertTrue(book2.getTitle().getContent().equals("where I am from"));     Assert.assertTrue(book2.getAuthor().equals("timfruit"));   }

常用的java框架有哪些

1.SpringMVC,Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。2.Shiro,Apache Shiro是Java的一个安全框架。3.Mybatis,MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。4.Dubbo,Dubbo是一个分布式服务框架。5.Maven,Maven是个项目管理和构建自动化工具。6.RabbitMQ,RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。7.Ehcache,EhCache 是一个纯Java的进程内缓存框架。

上述内容就是如何在java中操作xml,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI