做web嘛,难免要和XML打交道。
java用来操作xml的库有蛮多,dom4j、jdom等等,因为公司给的项目导入的是jdom包,所以研究了下jdom的基本使用方法。
资料来源:http://lwl860116.iteye.com/blog/605810
xml解析就是要以节点名为定位获取里面的节点属性和节点值放入实体类中,获取属性值和节点值是最后目的。
1. 解析xml
1)获取Document
InputStreamReader reader = null; FileInputStream fis = null; try { SAXBuilder builder = new SAXBuilder(true); fis = new FileInputStream(xmlPath); reader = new InputStreamReader(fis, "UTF-8"); builder.setValidation(false); return builder.build(reader);//document 对象返回 } finally { if (null != reader) { reader.close(); } if (null != fis) { fis.close(); } }
从String中读入
StringReader sr = new StringReader(strXML); InputSource is = new InputSource(sr); Document doc = (new SAXBuilder()).build(is);
2) 获取根节点
Element root = doc.getRootElement();
List list = root.getChildren(); //获取子节点集合 Element child = root.getChild(); //获取子节点 Element parent = element.getParentElement(); //获取父节点 element.getAttributeValue("name"); //获取属性的值 element.getText(); //获取节点值 element.getName(); //获取节点名
1) 构造Document对象
Document doc = new Document();2) 构造根节点并加入Document
Element xmlRoot = new Element("mxml"); doc.setRootElement(xmlRoot);
3) 构造节点
Element menu = new Element("menu"); //构造指定名称的节点 menu.setAttribute("sender", "10086"); //设置属性值 menu.setText("kkxx"); //设置节点值
4) 加入节点
xmlRoot.addContent(menu);
5) 保存为xml文件
OutputStreamWriter writer = null; FileOutputStream fos = null; Document doc = getDocumentObj(rootModel, fileType); // 设置xml信息的格式 XMLOutputter out = new XMLOutputter(); Format format = Format.getCompactFormat(); format.setLineSeparator("/n"); format.setIndent("/t"); format.setEncoding("UTF-8"); out.setFormat(format); //生成的xml文件名称 fos = new FileOutputStream(fileName); writer = new OutputStreamWriter(fos, "UTF-8"); //生成指定名称的xml文件 out.output(doc, writer); writer.close(); fos.close();
3. CDATA对象生成与解析
当你用FLASH和xml结合做网站应用程序时,例如你做在我研究游戏排行榜中,当让人自由输入姓名时,人们可以输入一些符号,例如 ∶"<"、">"、"/"、"?"等,当生成XML时,会破坏了XML结构,使数据中断。这就要用XML CDATA.在XML文档中的所有文本都会被解析器解析。只有在CDATA部件之内的文本会被解析器忽略。
1)生成对象
Element e = new Element("description"); CDATA contentCDATA = new CDATA("信息描述"); e.addContent(contentCDATA); root.addContent(e);
得到
<description><![CDATA[信息描述]]></description>
2)解析对象
同一般element取得对象一样
String d = root.getChildText("description");