篇四:Java操作XML
一、xml文件在Java中的转换
对象相互转换:xml、document、String、json
技术实现:jdom、javax.xml.parsers(java标准API)、dom4j
Document:操作xml的顶级入口
二、dom4j
学习地址:http://blog.csdn.net/redarmy_chen/article/details/12969219
1、获取Document
手动创建Document
/** * Document * @return */ public Document getDocument() { //主动创建Document对象 Document doc = DocumentHelper.createDocument(); //创建根节点,根节点只能一个 Element xml = doc.addElement("xml"); //根节点创建两个属性 xml.addAttribute("method", "testXml"); xml.addAttribute("type", "test"); //创建两个二级节点 Element user = xml.addElement("user"); Element bookStore = xml.addElement("bookstore"); //user创建子节点 user.addAttribute("isActive", "true"); user.addAttribute("userId", "2012117153"); Element name = user.addElement("name"); name.setText("刘广平"); Element age = user.addElement("age"); age.setText("18"); Element sex = user.addElement("sex"); sex.setText("男"); Element location = user.addElement("location"); location.setText("广东深圳"); //书店创建 for(int i = 1;i < 5;i++) { Element book = bookStore.addElement("book"+i); Element bookName = book.addElement("bookName"); bookName.setText("书本"+i); Element bookPrice = book.addElement("bookPrice"); bookPrice.setText(i+"元"); Element author = book.addElement("author"); author.setText("作者"+i); } return doc; }
String转Document
/** * 读取xml格式的String字符串,获取Document * @param text * @return */ public static Document getDocumentByText(String text) { Document doc = null; try { doc = DocumentHelper.parseText(text); } catch (Exception e) { e.printStackTrace(); } return doc; }
读取本地xml
/** * 通过文件流生成Document * @param io * @return */ public static Document getDocumentByIo(InputStream io) { Document doc = null; try { SAXReader reader = new SAXReader(); doc = reader.read(io); } catch (Exception e) { e.printStackTrace(); } return doc; }
读取流
/** * 通过文件流生成Document * @param io * @return */ public static Document getDocumentByIo(InputStream io) { Document doc = null; try { SAXReader reader = new SAXReader(); doc = reader.read(io); } catch (Exception e) { e.printStackTrace(); } return doc; }
2、Document生成xml文件,并存储
/** * 通过document创建xml * @param doc */ public static void generateXml(Document doc) { OutputFormat format = new OutputFormat("", true, "UTF-8"); format.setIndent(true); XMLWriter writer; try { //可以配置存储路径,只有文件名,保存在工程路径统计目录 writer = new XMLWriter(new FileOutputStream("src/main/java/xml/test.xml"),format); writer.write(doc); writer.close(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
3、Document转String:asXML(),转换后的结果是带
System.out.println("document:"+doc.asXML());
System.out.println("name:"+name.asXML());
转换后的结果
xml2Json:{"bookstore":{"book2":{"author":"作者2","bookPrice":"2元","bookName":"书本2"},"book1":{"author":"作者1","bookPrice":"1元","bookName":"书本1"},"book4":{"author":"作者4","bookPrice":"4元","bookName":"书本4"},"book3":{"author":"作者3","bookPrice":"3元","bookName":"书本3"}},"user":{"sex":"男","name":"刘广平","location":"广东深圳","age":"18"}}
4、Document常用操作
Document doc = new DocumentDemo().getDocument(); //获取根目录 Element root = doc.getRootElement(); //获取节点本身信息 String name = root.getName(); //获取节点名 String value1 = root.getStringValue(); //获取节点值 String value2 = root.getText(); //获取节点值 String value3 = root.getTextTrim();//获取节点值 //获取节点属性 int attrNum = root.attributeCount(); //属性总个数 Attribute attr = root.attribute("0");//通过下标获取属性对象 Attribute attr1 = root.attribute("id");//通过属性名获取属性对象 //批量获取子节点 @SuppressWarnings("unchecked") List<Element> eles = root.elements(); //批量获取属性 @SuppressWarnings("unchecked") List<Attribute> attrs = root.attributes(); //添加子节点 root.addElement("addElement", "addValue"); root.addAttribute("addAttribute", "addVlaue"); //删除子节点 Element element = root.element("addElement"); root.remove(element); //修改节点 Element nameElement = root.element("name"); nameElement.setText("newName");
三、Jdom操作XML
四、w3c操作XML:Java自带
学习地址:http://blog.csdn.net/u012325167/article/details/50943202
1、生成Document
/** * 创建DOM树: * 1、创建DocumentBuilderFactory对象 * 2、通过DocumentBuilderFactory对象创建DocumentBuilder对象 * 3、通过DocumentBuilder对象的newDocument()方法创建一个Document对象,该对象代表一个XML文件 * 4、通过Document对象的createElement()方法创建根节点 * 5、通过Document对象的createElement()方法创建N个子节点,并为他们赋值,再将这些子节点添加到根节点下 * 6、将根节点添加到Document对象下 */ public static Document getDocument() { Document doc = null; try { //创建DocumentBuilderFactory DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //创建DocumentBuilder DocumentBuilder builder = factory.newDocumentBuilder(); doc = builder.newDocument(); //创建根节点 Element root = doc.createElement("bookStore"); //创建子节点 Element book = doc.createElement("book"); book.setAttribute("id", "book1"); //创建子节点属性 Element name = doc.createElement("name"); name.setTextContent("安徒生童话"); book.appendChild(name); Element author = doc.createElement("author"); author.setTextContent("捉着"); book.appendChild(author); //根节点添加子节点 root.appendChild(book); //根节点添加到document doc.appendChild(root); } catch (Exception e) { e.printStackTrace(); } return doc; }
存储XML文件
/** * DOM树转换为XML文件: * 创建TransformerFactory类的对象 * 通过TransformerFactory创建Transformer对象 * 使用Transformer对象的transform()方法将DOM树转换为XML文件。 * (该方法有两个参数,第一个参数为源数据,需要创建DOMSource对象并将Document加载到其中; * 第二个参数为目的文件,即要生成的XML文件,需要创建StreamResult对象并指定目的文件) */ public static void transforXML(Document doc) { try { //创建TransformerFactory TransformerFactory tff = TransformerFactory.newInstance(); //创建Transformer Transformer tf = tff.newTransformer(); // 设置输出数据时换行 tf.setOutputProperty(OutputKeys.INDENT, "yes"); //创建 tf.transform(new DOMSource(doc), new StreamResult(new File("tt.xml"))); } catch (Exception e) { e.printStackTrace(); } }
1、Jdom
2、dom4j
3、javax.xml.parsers

浙公网安备 33010602011771号