Java Language
XOM - XML 객체 모델
수색…
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 파일 :
그것을 읽고 인쇄하기위한 코드 :
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
로 변환 할 수 있습니다. Document
는 Element
를 생성자에서 인수로 취합니다.
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"의 내용입니다.