SAX,DOM,JDOM...
推荐用jdom,用法和例子看www.jdom.org
推荐用jdom,用法和例子看www.jdom.org
解决方案 »
- IllegalArgumentException occurred while calling setter of com.entity.CmpShowmesf
- 使用Struts 2时Tomcat启动出错。
- frame框架的页面,其中一个子页面调用action,可以让整个页面跳转到result而不只是调用的部分吗?
- 模式窗口,跳转问题!急。。。。。。
- 高分求陈天河《struts hibernate spring集成开发宝典》随书源码
- 我的CMP 中有两个主键,怎么调用它的 findByPrimaryKey
- Lomboz 问题 急!
- 关于struts 中form表单中的name属性的问题,十万火急啊!!!!
- 问题很多哦!!!!!!大侠们帮忙啊!!!!!!!
- json拼接的字符串,日期格式转换问题
- 学 JAVA 要与 UNIX/Linux 结合起来学习吗?
- 数据库连接池简单问题~
效率方面,就用sax吧, 速度最快。我曾经在一个程序中试过用DOM和SAX,而SAX的效率是DOM的75倍!
package xmldemo.jdom;import java.io.IOException;
import org.jdom.CDATA;
import org.jdom.Document;
import org.jdom.output.XMLOutputter;
import org.jdom.Element;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author tangb
* @version 1.0
*/public class CreateJdomXML {
public CreateJdomXML() {
}
public static Document createRootNode(String name) {
Element reportStyle = new Element("ReportStyle");
Document rootDoc = new Document(reportStyle); String strId[] = {"资产负债表","现金流量表","销售成本表"}; for (int i = 0; i < strId.length; i ++) {
reportStyle.addContent(createReportNode(reportStyle, strId[i]));
}
return rootDoc;
}
public static Element createReportNode(Element reportStyle, String reportName) {
Element report = new Element("Report");
report.setAttribute("name",reportName);
int itemNum = getItemCodeNum(reportName);
for (int i = 0 ; i < itemNum; i ++) {
report.addContent(createItemNode(report, reportName, i));
}
return report;
}
public static Element createItemNode(Element itemNode, String reportName, int codeNum) { Element itemEle = null;
itemEle = new Element("ItemName");
String itemNodeValue = getText(reportName, codeNum);
itemEle.setAttribute("itemCode", String.valueOf(codeNum));
itemEle.addContent(new Element("value").addContent(
new CDATA(itemNodeValue)));
return itemEle;
}
public static String getText(String reportName, int itemNum) {
String value = null;
if (reportName.equals("资产负债表") && itemNum == 0) {
value = "资产负债表 itemNum0";
}
if (reportName.equals("资产负债表") && itemNum == 1) {
value = "资产负债表 itemNum1";
}
if (reportName.equals("现金流量表") && itemNum == 3) {
value = "现金流量表 itemNum3";
}
if (reportName.equals("销售成本表") && itemNum == 2) {
value = "销售成本表 itemNum2";
}
return value;
}
public static int getItemCodeNum(String reportName) {
int itemNum = 0;
if (reportName.equals("资产负债表")) {
itemNum = 3;
}
if (reportName.equals("现金流量表")) {
itemNum = 4;
}
if (reportName.equals("销售成本表")) {
itemNum = 5;
}
return itemNum;
}
public static void main(String[] args) {
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(new FileOutputStream("XML/xmlDemo.xml"));
Document doc = CreateJdomXML.createRootNode("tan");
XMLOutputter out = new XMLOutputter("\t", true, "GB2312");
out.output(doc, bos);
}catch (Exception ex) {
ex.printStackTrace();
} finally{
if (null != bos) {
try {
bos.flush();
bos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
*******************************
**********************************************
<?xml version="1.0" encoding="GB2312"?>
<ReportStyle>
<Report name="资产负债表">
<ItemName itemCode="0">
<value><![CDATA[资产负债表 itemNum0]]></value>
</ItemName>
<ItemName itemCode="1">
<value><![CDATA[资产负债表 itemNum1]]></value>
</ItemName>
<ItemName itemCode="2">
<value />
</ItemName>
</Report>
<Report name="现金流量表">
<ItemName itemCode="0">
<value />
</ItemName>
<ItemName itemCode="1">
<value />
</ItemName>
<ItemName itemCode="2">
<value />
</ItemName>
<ItemName itemCode="3">
<value><![CDATA[现金流量表 itemNum3]]></value>
</ItemName>
</Report>
<Report name="销售成本表">
<ItemName itemCode="0">
<value />
</ItemName>
<ItemName itemCode="1">
<value />
</ItemName>
<ItemName itemCode="2">
<value><![CDATA[销售成本表 itemNum2]]></value>
</ItemName>
<ItemName itemCode="3">
<value />
</ItemName>
<ItemName itemCode="4">
<value />
</ItemName>
</Report>
</ReportStyle>
**********************************************解析代码:
*********************************************
package xmldemo.jdom;import java.util.List;
import java.util.Iterator;
import org.jdom.Element;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
import java.io.FileInputStream;
import java.util.Vector;
import org.apache.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author tangb
* @version 1.0
*/public class ParseJdomXML {
private static final String DEFAULT_SAX_DRIVER_CLASS =
"org.apache.xerces.parsers.SAXParser";
private static List docList;
public ParseJdomXML() { }
public static Vector getReport(String xmlName) {
Vector reportVector = new Vector();
SAXBuilder builder = new SAXBuilder(DEFAULT_SAX_DRIVER_CLASS);
try { FileInputStream fis = new FileInputStream(xmlName);
Document doc = builder.build(fis);
Element rootEle = doc.getRootElement();
docList = rootEle.getChildren("Report");
//method 1
for (int i = 0; i < docList.size(); i ++) {
Element tempEle = (Element)docList.get(i);
String reportName = tempEle.getAttributeValue("name");
reportVector.add(tempEle.getAttribute("name"));
System.out.println("reportName " + tempEle.getAttribute("name"));
}
//method 2
/* Iterator reportItr = docList.iterator();
while (reportItr.hasNext()) {
Element tempEle = (Element) reportItr.next();
String reportName = tempEle.getAttributeValue("name");
reportVector.add(tempEle.getAttribute("name"));
System.out.println("reportName " + tempEle.getAttribute("name"));
}*/
System.out.println("***********************************************");
}
catch (Exception ex) {
ex.printStackTrace();
}
return reportVector;
}
public static Vector getItem(String reportName) {
Vector itemVector = new Vector();
//method 1
for (int i = 0; i < docList.size(); i ++) {
Element tempEle = (Element)docList.get(i);
String str = tempEle.getAttributeValue("name");
if (reportName.equals(str)) { //判断是否和传过来的名字相同
List tempList = tempEle.getChildren();
Iterator itemItr = tempList.iterator();
while (itemItr.hasNext()) {//如果相同则找出所有这个名字的内容
Element itemEle = (Element) itemItr.next();
Element valueEle = itemEle.getChild("value");
String itemValue= "";
if (null != valueEle) {
itemValue = valueEle.getText();
System.out.println("itemValue " + itemValue);
itemVector.add(itemValue);
} }
System.out.println("***********************************************");
}
}
//method 2
/*Iterator reportItr = docList.iterator();
while (reportItr.hasNext()) { //得到所有的名字
Element tempEle = (Element) reportItr.next();
String str = tempEle.getAttributeValue("name");
if (reportName.equals(str)) { //判断是否和传过来的名字相同
List tempList = tempEle.getChildren();
Iterator itemItr = tempList.iterator();
while (itemItr.hasNext()) {//如果相同则找出所有这个名字的内容
Element itemEle = (Element) itemItr.next();
Element valueEle = itemEle.getChild("value");
String itemValue= "";
if (null != valueEle) {
itemValue = valueEle.getText();
System.out.println("itemValue " + itemValue);
itemVector.add(itemValue);
} }
System.out.println("***********************************************");
} }*/
return itemVector;
}
public static String getCode(String reportName, String value) {//根据值得到 itemCode
Iterator reportItr = docList.iterator();
while (reportItr.hasNext()) {
Element tempEle = (Element) reportItr.next();
String str = tempEle.getAttributeValue("name");
if (reportName.equals(str)) {
List tempList = tempEle.getChildren();
Iterator itemItr = tempList.iterator();
while (itemItr.hasNext()) {
Element itemEle = (Element) itemItr.next();
Element valueEle = itemEle.getChild("value");
if (null != valueEle) {
String itemName = valueEle.getText();
if (itemName.equals(value)) {
System.out.println("reportName = " + reportName + "|| " + " value = " + value + "|| " + "itemCode = "
+ itemEle.getAttributeValue("itemCode"));
return (String)itemEle.getAttributeValue("itemCode");
}
} }
} }
return null;
}
public static void main(String[] args) {
try {
ParseJdomXML.getReport("XML/xmlDemo.xml"); ParseJdomXML.getItem("现金流量表");
ParseJdomXML.getCode("资产负债表", "资产负债表 itemNum1");
}
catch (Exception ex) {
ex.printStackTrace();
} }
}
********************************************
XML文件:classConfig.xml
************************
<?xml version="1.0" encoding="gb2312"?><school name="清华大学">
<grade id ="1" name = "一年">
<class id="1" name="一班">
<teacher name="tan" sex= "男" age="23"/>
</class>
<class id="2" name="二班">
<teacher name="wu" sex= "女" age="24"/>
</class>
<class id="3" name="三班">
<teacher name="li" sex= "男" age="28"/>
</class>
</grade>
<grade id ="2" name = "二年">
<class id="1" name="一班">
<teacher name="guo" sex= "女" age="33"/>
</class>
<class id="2" name="二班">
<teacher name="刘德华" sex= "女" age="35"/>
</class>
</grade>
</school>
-------------------------
非常感谢。另:怎么我下了jdom-b10后将所有lib下的
jar文件加上还是提示import org.jdom.CDATA;
import org.jdom.Document;
import org.jdom.output.XMLOutputter;这些包找不到。请问:版本有什么要求吗?
import org.jdom.Element;
是build/jdom.jar谢谢!!
itemEle = new Element("ItemName");
String itemNodeValue = getText(reportName, codeNum);
itemEle.setAttribute("itemCode", String.valueOf(codeNum));
itemEle.addContent(new Element("value").addContent(
new CDATA(itemNodeValue)));
return itemEle;
}
------------------------
itemEle.addContent(new Element("value").addContent(
new CDATA(itemNodeValue)));提示类型错误,就是参数不匹配。
new CDATA(itemNodeValue)));改为:Element newElement = new Element("value");
newElement.addContent(new CDATA(itemNodeValue));
itemEle.addContent(newElement);
问题解决。