Project——XML文件操作

1、

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="cn.itcast.xml"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
       <uses-library android:name="android.test.runner" />
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="8" />
 <instrumentation android:name="android.test.InstrumentationTestRunner"
  android:targetPackage="cn.itcast.xml" android:label="Tests for My App" />
</manifest>

2、

<?xml version="1.0" encoding="UTF-8"?>
<persons>
 <person id="23">
  <name>liming</name>
  <age>30</age>
 </person>
 <person id="20">
  <name>zhangxiaoxiao</name>
  <age>25</age>
 </person>
</persons>
3、

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<persons>
 <person id="90">
  <name>zhangxiaoxiao</name>
  <age>13</age>
 </person>
 <person id="35">
  <name>liming</name>
  <age>23</age>
 </person>
 <person id="78">
  <name>laobi</name>
  <age>33</age>
 </person>
</persons>

4、

package cn.itcast.xml;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

5、

package cn.itcast.xml;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import cn.itcast.domain.Person;
import cn.itcast.service.DOMPersonService;
import cn.itcast.service.PullPersonService;
import cn.itcast.service.SAXPersonService;

import android.test.AndroidTestCase;
import android.util.Log;

public class PersonServiceTest extends AndroidTestCase {
 private static final String TAG = "PersonServiceTest";
 
 public void testSAXgetPersons() throws Throwable{
  InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("person.xml");
  SAXPersonService service = new SAXPersonService();
  List<Person> persons = service.getPersons(inStream);
  for(Person person : persons){
   Log.i(TAG, person.toString());
  }
 }
 
 public void testDOMgetPersons() throws Throwable{
  InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("person.xml");
  List<Person> persons = DOMPersonService.getPersons(inStream);
  for(Person person : persons){
   Log.i(TAG, person.toString());
  }
 }
 
 public void testPullgetPersons() throws Throwable{
  InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("person.xml");
  List<Person> persons = PullPersonService.getPersons(inStream);
  for(Person person : persons){
   Log.i(TAG, person.toString());
  }
 }
 
 public void testSave() throws Throwable{
  File file = new File(this.getContext().getFilesDir(), "person.xml");
  FileOutputStream outStream = new FileOutputStream(file);
  List<Person> persons = new ArrayList<Person>();
  persons.add(new Person(90, "zhangxiaoxiao", (short)13));
  persons.add(new Person(35, "liming", (short)23));
  persons.add(new Person(78, "laobi", (short)33));
  PullPersonService.save(persons, outStream);
 }
}

6、

package cn.itcast.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import cn.itcast.domain.Person;
/**
 * 采用DOM解析xml文件
 */
public class DOMPersonService {

 public static List<Person> getPersons(InputStream inStream) throws Exception{
  List<Person> persons = new ArrayList<Person>();
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder();
  Document document = builder.parse(inStream);
  Element root = document.getDocumentElement();
  NodeList personNodes = root.getElementsByTagName("person");
  for(int i=0; i < personNodes.getLength() ; i++){
   Element personElement = (Element)personNodes.item(i);
   int id = new Integer(personElement.getAttribute("id"));
   Person person = new Person();
   person.setId(id);
   NodeList childNodes = personElement.getChildNodes();
   for(int y=0; y < childNodes.getLength() ; y++){
    if(childNodes.item(y).getNodeType()==Node.ELEMENT_NODE){
     if("name".equals(childNodes.item(y).getNodeName())){
      String name = childNodes.item(y).getFirstChild().getNodeValue();
      person.setName(name);
     }else if("age".equals(childNodes.item(y).getNodeName())){
      String age = childNodes.item(y).getFirstChild().getNodeValue();
      person.setAge(new Short(age));
     }
    }
   }
   persons.add(person);
  }
  inStream.close();
  return persons;
 }
}

7、

package cn.itcast.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import cn.itcast.domain.Person;
/**
 * 采用SAX解析xml文件
 */
public class SAXPersonService {

 public List<Person> getPersons(InputStream inStream) throws Exception{
  SAXParserFactory factory = SAXParserFactory.newInstance();
  SAXParser parser = factory.newSAXParser();
  PersonHandler handler = new PersonHandler();
  parser.parse(inStream, handler);
  return handler.getPersons();
 }
 
 private final class PersonHandler extends DefaultHandler{
  private List<Person> persons;
  private Person person = null;
  private String tag = null;
  
  public List<Person> getPersons() {
   return persons;
  }

  @Override
  public void startDocument() throws SAXException {
   persons = new ArrayList<Person>();
  }

  @Override
  public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
   if("person".equals(localName)){
    person = new Person();
    person.setId(new Integer(attributes.getValue(0)));
   }
   tag = localName;
  }

  @Override
  public void characters(char[] ch, int start, int length)
    throws SAXException {
   if(tag!=null){
    String data = new String(ch, start, length);
    if("name".equals(tag)){     
     person.setName(data);
    }else if("age".equals(tag)){
     person.setAge(new Short(data));
    }    
   }
  }

  @Override
  public void endElement(String uri, String localName, String qName)
    throws SAXException {
   if("person".equals(localName)){
    persons.add(person);
    person = null;
   }
   tag = null;
  }
  
 }
}

8、

package cn.itcast.service;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

import cn.itcast.domain.Person;
/**
 * 采用Pull解析xml文件
 */
public class PullPersonService {
 
 public static void save(List<Person> persons, OutputStream outStream) throws Exception{
  XmlSerializer serializer = Xml.newSerializer();
  serializer.setOutput(outStream, "UTF-8");
  serializer.startDocument("UTF-8", true);
  serializer.startTag(null, "persons");
  for(Person person : persons){
   serializer.startTag(null, "person");
   serializer.attribute(null, "id", person.getId().toString());
   serializer.startTag(null, "name");
   serializer.text(person.getName());
   serializer.endTag(null, "name");
   
   serializer.startTag(null, "age");
   serializer.text(person.getAge().toString());
   serializer.endTag(null, "age");
   
   serializer.endTag(null, "person");
  }  
  serializer.endTag(null, "persons");
  serializer.endDocument();
  outStream.flush();
  outStream.close();
 }

 public static List<Person> getPersons(InputStream inStream) throws Exception{
  Person person = null;
  List<Person> persons = null;
  XmlPullParser pullParser = Xml.newPullParser();
  pullParser.setInput(inStream, "UTF-8");
  int event = pullParser.getEventType();//触发第一个事件
  while(event!=XmlPullParser.END_DOCUMENT){
   switch (event) {
   case XmlPullParser.START_DOCUMENT:
    persons = new ArrayList<Person>();
    break;
   case XmlPullParser.START_TAG:
    if("person".equals(pullParser.getName())){
     int id = new Integer(pullParser.getAttributeValue(0));
     person = new Person();
     person.setId(id);
    }
    if(person!=null){
     if("name".equals(pullParser.getName())){
      person.setName(pullParser.nextText());
     }
     if("age".equals(pullParser.getName())){
      person.setAge(new Short(pullParser.nextText()));
     }
    }
    break;
    
   case XmlPullParser.END_TAG:
    if("person".equals(pullParser.getName())){
     persons.add(person);
     person = null;
    }
    break;
   }
   event = pullParser.next();
  }
  return persons;
 }
}

9、

package cn.itcast.domain;

public class Person {
 private Integer id;
 private String name;
 private Short age;
 
 public Person(){}
 
 public Person(Integer id, String name, Short age) {
  this.id = id;
  this.name = name;
  this.age = age;
 }
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Short getAge() {
  return age;
 }
 public void setAge(Short age) {
  this.age = age;
 }
 @Override
 public String toString() {
  return "Person [age=" + age + ", id=" + id + ", name=" + name + "]";
 }
 
}

 

根据提供的引用\[1\],当在pom.xml文件中添加以下依赖时,project标签会报错: ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</version> </parent> ``` 为了解决这个问题,可以在parent标签中添加`<relativePath>`标签,如下所示: ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</version> <relativePath></relativePath> </parent> ``` `<relativePath>`标签的作用是指定查找路径。在Maven中,查找依赖的顺序是先查找上级目录的pom.xml文件,然后是本地仓库,最后是远程仓库。如果不指定`<relativePath>`,默认会去上级目录的pom.xml文件中查找。而如果直接加上`<relativePath>`标签并留空,意味着直接去本地仓库查找,然后再去远程仓库查找。 所以,通过添加`<relativePath>`标签并留空,可以解决pom.xml文件project标签报错的问题。 #### 引用[.reference_title] - *1* [一. 常见bug——pom文件的project标签爆红](https://blog.csdn.net/HSH541/article/details/125897630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值