수색…


XML 파일 읽기

XOM으로 XML 데이터를로드하려면 Document 로 빌드 할 수있는 Builder 를 만들어야합니다.

Builder builder = new Builder();
Document doc = builder.build(file);

xml 파일에서 최상위 부모 인 루트 요소를 가져 오려면 Document 인스턴스에서 getRootElement() 를 사용해야합니다.

Element root = doc.getRootElement();

이제 Element 클래스에는 xml을 읽기 쉽게 만드는 편리한 메소드가 많이 있습니다. 가장 유용한 것들은 다음과 같습니다.

  • getChildElements(String name) - Elements 의 배열 역할을하는 Elements 인스턴스를 반환합니다.
  • getFirstChildElement(String name) - 그 태그를 가지는 최초의 아이 요소를 돌려줍니다.
  • getValue() - 요소 내부의 값을 반환합니다.
  • getAttributeValue(String name) - 지정된 이름을 가지는 속성의 값을 돌려줍니다.

getChildElements() 를 호출하면 Elements 인스턴스가 생성됩니다. 이것으로부터 루프를 통해 get(int index) 메소드를 호출하여 내부의 모든 요소를 ​​검색 할 수 있습니다.

Elements colors = root.getChildElements("color");
for (int q = 0; q < colors.size(); q++){
    Element color = colors.get(q);
}

예 : 다음은 XML 파일을 읽는 예제입니다.

XML 파일 :

xml 예제

그것을 읽고 인쇄하기위한 코드 :

import java.io.File;
import java.io.IOException;
import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Element;
import nu.xom.Elements;
import nu.xom.ParsingException;

public class XMLReader {
    
    public static void main(String[] args) throws ParsingException, IOException{
        File file = new File("insert path here");
        // builder builds xml data
        Builder builder = new Builder();
        Document doc = builder.build(file);
        
        // get the root element <example>
        Element root = doc.getRootElement();
        
        // gets all element with tag <person>
        Elements people = root.getChildElements("person");
        
        for (int q = 0; q < people.size(); q++){
            // get the current person element
            Element person = people.get(q);
            
            // get the name element and its children: first and last
            Element nameElement = person.getFirstChildElement("name");
            Element firstNameElement = nameElement.getFirstChildElement("first");
            Element lastNameElement = nameElement.getFirstChildElement("last");
            
            // get the age element
            Element ageElement = person.getFirstChildElement("age");
            
            // get the favorite color element
            Element favColorElement = person.getFirstChildElement("fav_color");
            
            String fName, lName, ageUnit, favColor;
            int age;
            
            try {
                fName = firstNameElement.getValue();
                lName = lastNameElement.getValue();
                age = Integer.parseInt(ageElement.getValue());
                ageUnit = ageElement.getAttributeValue("unit");
                favColor = favColorElement.getValue();
                
                System.out.println("Name: " + lName + ", " + fName);
                System.out.println("Age: " + age + " (" + ageUnit + ")");
                System.out.println("Favorite Color: " + favColor);
                System.out.println("----------------");
                
            } catch (NullPointerException ex){
                ex.printStackTrace();
            } catch (NumberFormatException ex){
                ex.printStackTrace();
            }
        }
    }
    
}

이것은 콘솔에 출력됩니다 :

Name: Smith, Dan
Age: 23 (years)
Favorite Color: green
----------------
Name: Autry, Bob
Age: 3 (months)
Favorite Color: N/A
----------------

XML 파일에 쓰기

XOM을 사용하여 XML 파일에 기록하는 것은 인스턴스를 루트에서 검색하는 대신 인스턴스를 만드는 경우를 제외하고는 읽기와 매우 비슷합니다.

새로운 Element를 생성하려면 Element(String name) . 루트 요소를 만들어서 쉽게 Document 추가 할 수 있습니다.

Element root = new Element("root");

Element 클래스는 Element 를 편집하기위한 편리한 메소드를 가지고 있습니다. 아래에 나열되어 있습니다.

  • appendChild(String name) - 기본적으로 요소의 값을 name으로 설정합니다.
  • appendChild(Node node) - 이것은 node 부모 요소로 만듭니다. 요소는 노드이므로 요소를 구문 분석 할 수 있습니다.
  • addAttribute(Attribute attribute) - 요소에 속성을 추가합니다.

Attribute 클래스에는 몇 가지 다른 생성자가 있습니다. 가장 간단한 것은 Attribute(String name, String value) 입니다.


일단 모든 요소를 ​​루트 요소에 추가하면 Document 로 변환 할 수 있습니다. DocumentElement 를 생성자에서 인수로 취합니다.

Serializer 사용하여 XML을 파일에 쓸 수 있습니다. Serializer 생성자에서 구문 분석 할 새 출력 스트림을 만들어야합니다.

FileOutputStream fileOutputStream = new FileOutputStream(file);
Serializer serializer = new Serializer(fileOutputStream, "UTF-8");
serializer.setIndent(4);
serializer.write(doc);

암호:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import nu.xom.Attribute;
import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Element;
import nu.xom.Elements;
import nu.xom.ParsingException;
import nu.xom.Serializer;

public class XMLWriter{
    
    public static void main(String[] args) throws UnsupportedEncodingException, 
            IOException{
        // root element <example>
        Element root = new Element("example");
        
        // make a array of people to store
        Person[] people = {new Person("Smith", "Dan", "years", "green", 23), 
            new Person("Autry", "Bob", "months", "N/A", 3)};
        
        // add all the people
        for (Person person : people){
            
            // make the main person element <person>
            Element personElement = new Element("person");
            
            // make the name element and it's children: first and last
            Element nameElement = new Element("name");
            Element firstNameElement = new Element("first");
            Element lastNameElement = new Element("last");
            
            // make age element
            Element ageElement = new Element("age");
            
            // make favorite color element
            Element favColorElement = new Element("fav_color");
            
            // add value to names
            firstNameElement.appendChild(person.getFirstName());
            lastNameElement.appendChild(person.getLastName());
            
            // add names to name
            nameElement.appendChild(firstNameElement);
            nameElement.appendChild(lastNameElement);
            
            // add value to age
            ageElement.appendChild(String.valueOf(person.getAge()));
            
            // add unit attribute to age
            ageElement.addAttribute(new Attribute("unit", person.getAgeUnit()));
            
            // add value to favColor
            favColorElement.appendChild(person.getFavoriteColor());
            
            // add all contents to person
            personElement.appendChild(nameElement);
            personElement.appendChild(ageElement);
            personElement.appendChild(favColorElement);
            
            // add person to root
            root.appendChild(personElement);
        }
        
        // create doc off of root
        Document doc = new Document(root);
        
        // the file it will be stored in
        File file = new File("out.xml");
        if (!file.exists()){
            file.createNewFile();
        }
        
        // get a file output stream ready
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        
        // use the serializer class to write it all
        Serializer serializer = new Serializer(fileOutputStream, "UTF-8");
        serializer.setIndent(4);
        serializer.write(doc);
    }

    private static class Person {

        private String lName, fName, ageUnit, favColor;
        private int age;

        public Person(String lName, String fName, String ageUnit, String favColor, int age){
            this.lName = lName;
            this.fName = fName;
            this.age = age;
            this.ageUnit = ageUnit;
            this.favColor = favColor;
        }

        public String getLastName() { return lName; }
        public String getFirstName() { return fName; }
        public String getAgeUnit() { return ageUnit; }
        public String getFavoriteColor() { return favColor; }
        public int getAge() { return age; }
    }
    
}

이것은 "out.xml"의 내용입니다.

XML 파일



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow