做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();
3)解析信息
List list = root.getChildren(); //獲取子節點集合
Element child = root.getChild(); //獲取子節點
Element parent = element.getParentElement(); //獲取父節點
element.getAttributeValue("name"); //獲取屬性的值
element.getText(); //獲取節點值
element.getName(); //獲取節點名
2. 生成xml
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");