时间:2021-05-19
这篇文章主要介绍了java操作xml的方法汇总及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
一丶常用方法
主要有3个方面, 1读取xml文件, 2使用xpath根据指定路径获取某一节点数据 3, xml和java bean的转换
XmlUtils.java
/** * 和cn.hutool.core.util.XmlUtil许多功能重合, 本类可以当做学习的例子 * 可以直接使用cn.hutool.core.util.XmlUtil * * @author TimFruit * @date 19-11-2 下午5:22 */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://.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")); }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了java基于dom4j包实现对XML解析的方法。分享给大家供大家参考,具体如下:本例中的xml文件内容如下:Java解析XML代码如下:packa
在java中,原生解析xml文档的方式有两种,分别是:Dom解析和Sax解析Dom解析功能强大,可增删改查,操作时会将xml文档以文档对象的方式读取到内存中,因
本文实例为大家分享了java解析/读取xml文件的方法,供大家参考,具体内容如下XML文件JohnB12MaryA11SimonA18Java代码:packag
本文实例讲述了PHP基于SimpleXML生成和解析xml的方法。分享给大家供大家参考,具体如下:xml就不多解释了,php也提供了操作xml的方法,php操作
Android中XML的一些操作解析类://构造方法publicXMLParser(){}/***从URL获取XML使HTTP请求**@paramurl*str