Java解析xml文件之增删改查

XML是什么:
可扩展的标记语言

XML能干什么:
描述数据、存储数据、传输(交换)数据。

XML文档节点类型:
u     文档(document)

u     元素(element)

u     属性(attribute)

u     文本(PCDATA--parsed character data)

u     注释(comment)

u     DOCTYPE :主要验证文档内容的正确性

u     实体(ENTITIES)

u     CDATA(character data)

XML语法:
1、声明:<?xmlversion="1.0" encoding="UTF-8"?>

2、根节点:必须有一个根节点

3、标签:标签必须有结束且区分大小写,标签必须顺序嵌套

4、属性:必须引号引起值

5、空格会被保留,HTML空格最多保留一个

6、命名规则:命名必须见名知意

     a)名字可包含字母、数字以及其他的字符 

     b)名字不能以数字或者标点符号开始

     c)名字不能以字符“xml”(或者XML、Xml)开始

7、名字不能包含空格

8、 不应在 XML 元素名称中使用 ":" ,这是由于它用于命名空间(namespaces)的保留字。

9、标签优先于属性。

10、XML 命名空间可提供避免元素命名冲突的方法。

11、CDATA:字符数据,<![CDATA[字符数据]]> ,字符数据不进行转义

首先,新建一个文件用于存储数据:

File file = new File("E:/infos.xml");
        if(!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

新建一个person类:

public class Person {
    String name;
    String gender;
    String phone;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public Person(String name, String gender, String phone) {
        super();
        this.name = name;
        this.gender = gender;
        this.phone = phone;
    }
}

添加节点:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setIgnoringElementContentWhitespace(false);
        DocumentBuilder builder = null;
        try {
            builder = factory.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Document document = builder.newDocument();
        List<Person> people = new ArrayList<Person>();
        Person p1 = new Person("Amy","femal","1234567");
        Person p2 = new Person("Jack","male","23132133");
        Person p3 = new Person("Alice","femal","21312432");
        people.add(p1);
        people.add(p2);
        people.add(p3);
        Element peopleElement = document.createElement("people");
        for(int i=0;i<people.size();i++) {
            Element personElement = document.createElement("person");
            Element nameElem = document.createElement("name");
            nameElem.setTextContent(people.get(i).getName());
            Element genderElem = document.createElement("gender");
            genderElem.setTextContent(people.get(i).getGender());
            Element phoneElem = document.createElement("phone");
            phoneElem.setTextContent(people.get(i).getPhone());
            
            personElement.appendChild(nameElem);
            personElement.appendChild(genderElem);
            personElement.appendChild(phoneElem);
            
            peopleElement.appendChild(personElement);
        }
        document.appendChild(peopleElement);
        trans(document,file);

    private static void trans(Document document, File file) {
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer;
        try {
            transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");// 增加换行缩进,但此时缩进默认为0
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "3");// 设置缩进为2
            transformer.setOutputProperty("encoding", "UTF-8");
            StringWriter writer = new StringWriter();
            transformer.transform(new DOMSource(document), new StreamResult(writer));
            transformer.transform(new DOMSource(document), new StreamResult(file));
            writer.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

info.xml结果:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<people>
   <person>
      <name>Amy</name>
      <gender>femal</gender>
      <phone>1234567</phone>
   </person>
   <person>
      <name>Jack</name>
      <gender>male</gender>
      <phone>23132133</phone>
   </person>
   <person>
      <name>Alice</name>
      <gender>femal</gender>
      <phone>21312432</phone>
   </person>
</people>

修改节点,以修改Amy的电话号码为例:

File file = new File("E:/infos.xml");
Person p = new Person("Amy","femal","7654321");
revicePerson(file,p);

private static void revicePerson(File file,Person p) {
        Document document = getDocument();  
        NodeList list = document.getElementsByTagName("person");
        for (int i = 0; i < list.getLength(); i++) {
            Element element = (Element) list.item(i);
            String value = element.getAttribute("name");
            if (p.getName().equals(value)) {
                element.getElementsByTagName("gender").item(0).setTextContent(p.getGender());
                element.getElementsByTagName("phone").item(0).setTextContent(p.getPhone());
            }
        }
        trans(document,file);
    }

查询信息,以查询Jack的信息为例:

String userName = "Jack";
        Person Jack = findPerson(userName);

private static Person findPerson(String userName) {
        Document document = getDocument();  
        NodeList list = document.getElementsByTagName("person");
        for (int i = 0; i < list.getLength(); i++) {
            Element element = (Element) list.item(i);
            String value = element.getAttribute("name");
            if (userName.equals(value)) {
                Person p = new Person();
                p.setName(userName);
                p.setGender(element.getElementsByTagName("gender").item(0).getTextContent());
                p.setPhone(element.getElementsByTagName("phone").item(0).getTextContent());
                return p;
            }
        }
        return null;
    }

删除信息,以删除Alice为例:

String userName = "Alice";
        deletePerson(file,userName);

private static void deletePerson(File file,String userName) {
        Document document = getDocument();  
        NodeList list = document.getElementsByTagName("person");
        for (int i = 0; i < list.getLength(); i++) {
            Element element = (Element) list.item(i);
            String value = element.getAttribute("name");
            if (userName.equals(value)) {
                element.getParentNode().removeChild(element);
                break;
            }
        }
        trans(document,file);
    }

猜你喜欢

转载自blog.csdn.net/jiaming917/article/details/85840001