一、DOM解析XML文件
[
java]
public static void main(String[] args) {
File file = new File("d:\\
wordChronos.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder docbuder;
try {
docbuder = dbf.newDocumentBuilder();
Document doc = docbuder.parse(file);
NodeList nl = doc.getElementsByTagName_r("Set");
for(int i = 0;i < nl.getLength();i ++){
doc.getElementsByTagName_r("Time1").item(0).getFirstChild().setNodeValue("2010-10-30");
String s1 = doc.getElementsByTagName_r("Time1").item(0).getFirstChild().getNodeValue();
String s2 = doc.getElementsByTagName_r("Time2").item(0).getFirstChild().getNodeValue();
String s3 = doc.getElementsByTagName_r("Time3").item(0).getFirstChild().getNodeValue();
String s4 = doc.getElementsByTagName_r("Music1").item(0).getFirstChild().getNodeValue();
System.out.println(s1 + ";" + s2 + ";" + s3 + ";" + s4);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
二、DOM4J解析XML文件
[
java]
SAXReader reader = new SAXReader();
Document document;
try {
document = reader.read(new File("d:\\
wordChronos.xml"));
Element root = ((org.dom4j.Document) document).getRootElement();
List<Element> worktimes = root.elements("Set");
for (Element worktime : worktimes) {
worktime.element("Time1").setText("07:00");
worktime.element("Time2").setText("08:00");
worktime.element("Time3").setText("09:00");
worktime.element("Music1").setText("我知道我爱你.mp3");
time1 = worktime.element("Time1").getText();
time2 = worktime.element("Time2").getText();
time3 = worktime.element("Time3").getText();
musicPath1 = worktime.element("Music1").getText();
System.out.println(time1+"\t"+time2+"\t"+time3+"\t"+musicPath1);
}
XMLWriter writer = new XMLWriter(new FileWriter("d:\\
wordChronos.xml"));
writer.write(document);
writer.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
三、
Android自带的pull解析方式
********************************xml文件格式***************************************
[html]
<?xml version="1.0" encoding="utf-8" ?>
<LunarFeast>
<Feast>
<Date>0101</Date>
<Content>春节</Content>
</Feast>
<Feast>
<Date>0115</Date>
<Content>元宵节</Content>
</Feast>
<Feast>
<Date>0202</Date>
<Content>青龙节</Content>
</Feast>
。。。。。。。
</LunarFeast>
**********************************************************************************
[
java]
//解析XML文件
public List<Message> parser2(){
//资源中的xml文件,如下方式获取:
//XmlPullParser parser = this.getResources().getXml(R.xml.solarfeastfile);
//sdcard里面的xml文件,如下方式获取
XmlPullParser parser = Xml.newPullParser();
InputStream is = new FileInputStream(path);
parser.setInput(is,"utf-8");
try {
int eventType = parser.getEventType();
Message currentMessage = null;
boolean done = false;
while(eventType!= XmlPullParser.END_DOCUMENT ;; !done){
String name = null;
switch(eventType){
case XmlPullParser.START_DOCUMENT:
message2 = new ArrayList<Message>();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if(name.equalsIgnoreCase("Feast")){
currentMessage = new Message();
}else if(currentMessage != null){
if(name.equalsIgnoreCase("Date")){
currentMessage.setDate(parser.nextText());
}else if(name.equalsIgnoreCase("content")){
currentMessage.setContent(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if(name.equalsIgnoreCase("Feast") ;; currentMessage != null){
message2.add(currentMessage);
}
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return message2;
}
四、SAX引擎读取xml文件:
************************************xml文件格式*********************************
[html]
<?xml version="1.0" encoding="utf-8" ?>
<products>
<product>
<id>10</id>
<name>电脑</name>
<price>2067.25</price>
</product>
<product>
<id>20</id>
<name>微波炉</name>
<price>520</price>
</product>
<product>
<id>30</id>
<name>洗衣机</name>
<price>2400</price>
</product>
</products>
********************************************************************************
1、继承DefaultHandler类,处理5个分析点的事件
[
java]
public class XML2Product extends DefaultHandler{
private List<Product> products;
private Product product;
private StringBuffer buffer = new StringBuffer();
public List<Product> getProducts(){
return products;
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException{
buffer.append(ch, start, length);
super.characters(ch, start, length);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException{
if (localName.equals("product")){
products.add(product);
}else if (localName.equals("id")){
product.setId(Integer.parseInt(buffer.toString().trim()));
buffer.setLength(0);
}else if (localName.equals("name")){
product.setName(buffer.toString().trim());
buffer.setLength(0);
}else if (localName.equals("price")){
product.setPrice(Float.parseFloat(buffer.toString().trim()));
buffer.setLength(0);
}
super.endElement(uri, localName, qName);
}
@Override
public void startDocument() throws SAXException{
products = new ArrayList<Product>();
}
@Override
public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException{
if (localName.equals("product")){
product = new Product();
}
super.startElement(uri, localName, qName, attributes);
}
}
2、上面的类,将解析的内容显示出来
[
java]
@Override
public void onFileItemClick(String filename){
try{
if (!filename.toLowerCase().endsWith("xml"))
return;
FileInputStream fis = new FileInputStream(filename);
XML2Product xml2Product = new XML2Product();
Android.util.Xml.parse(fis, Xml.Encoding.UTF_8, xml2Product);
List<Product> products = xml2Product.getProducts();
String msg = "共" + products.size() + "个产品\n";
for (Product product : products){
msg += "id:" + product.getId() + " 产品名:" + product.getName() + " 价格:" + product.getPrice() + "\n";
}
new AlertDialog.Builder(this).setTitle("产品信息").setMessage(msg).setPositiveButton("关闭", null).show();
}
catch (Exception e){
}
}
作者:huweilong1030