아래는 제가 직접 작성한 XML 읽기 테스트입니다.
다음과 같이 코드 코드를 복사합니다 .
import java.util.Iterator;
import java.io.BufferedReader;
java.io.파일 가져오기;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
org.dom4j.* 가져오기;
org.dom4j.io.SAXReader 가져오기;
공개 클래스 XmlRead {
정적 StringBuilder sBuilder = new StringBuilder();
public static void main(String[] args)에서 IOException이 발생합니다.
BufferedReader bReader = 새로운 BufferedReader(새 InputStreamReader(
시스템인));
문자열 경로 = null;
System.out.println("XML 파일의 절대 경로와 파일 이름을 입력하세요:/n");
경로 = bReader.readLine();
sBuilder.append("XML 파일 내용 출력 시작/n");
문서 문서 = null;
노력하다 {
문서 = 읽기(경로);
sBuilder.append(경로 + "/n");
} catch (MalformedURLException e) {
e.printStackTrace();
} 잡기(DocumentException e) {
e.printStackTrace();
}
요소 루트 = getRootElement(document);
if (루트 == null) {
System.out.print("루트 노드를 얻지 못했습니다.");
반품;
}
// XML 문서의 인코딩 형식을 가져옵니다.
문자열 encString = document.getXMLEncoding();
sBuilder.append("<?xml 버전=/"1.0/" 인코딩=/"" + encString
+ "/">/n");
sBuilder.append(elementText(root, attText(root), 0));
System.out.println(getIterator(root, 0) + "</" + root.getName() + ">");
}
/**
* 재귀 노드
*
* @설명
* @param 요소
* @param 레벨
* 수준
* @반품
*/
개인 정적 문자열 getIterator(요소 요소, int lvl) {
레벨 += 1;
for (Iterator i = element.elementIterator(); i.hasNext();) {
요소 e = (요소) i.next();
sBuilder.append(elementText(e, attText(e), lvl));
getIterator(e, lvl);
int count = e.nodeCount();
if (개수 > 0) {
for (int j = 0; j < lvl; j++) {
sBuilder.append(" ");
}
}
sBuilder.append("</" + e.getName() + ">/n");
}
sBuilder.toString()을 반환합니다.
}
/**
* 현재 노드 속성의 문자열 값을 가져옵니다.
*
* @설명
* @param 요소
* 현재 노드
* @반품
*/
개인 정적 문자열 attText(요소 요소) {
문자열 str = " ";
for (int i = 0; i < element.attributeCount(); i++) {
속성 속성 = element.attribute(i);
str += attribute.getName() + "=/"" + attribute.getValue() + "/" ";
}
str을 반환;
}
/**
* 현재 요소의 텍스트 값을 가져옵니다.
*
* @설명
* @param 요소
* 현재 요소 노드
* @param 텍스트
* 속성 값
* @param 레벨
* 수준
* @반품
*/
private static String elementText(요소 요소, 문자열 텍스트, int lvl) {
문자열 str = "";
for (int i = 0; i < lvl; i++) {
str += " ";
}
str += "<" + element.getName();
if (텍스트 != null && 텍스트 != "") {
str += 텍스트;
}
//dom4j에는 hasChild 속성이나 메서드가 없으므로 nodeCount() 메서드를 사용하여 자식 노드가 있는지 확인해야 합니다.
int count = element.nodeCount();
if (개수 == 0) {
return str += ">";
}
return str += ">/n";
}
/**
*
* @description XML 파일 읽기
* @param 파일
* 파일 이름을 포함한 XML 파일 경로
* @return 문서 문서
* @MalformedURLException 발생
* @throws DocumentException
*/
공개 정적 문서 읽기(문자열 파일)에서 MalformedURLException이 발생합니다.
DocumentException {
SAXReader 리더 = 새로운 SAXReader();
문서 document = reader.read(new File(file));
문서 반환;
}
/**
* Document 문서의 루트 노드를 가져옵니다.
*
* @param 문서
* @반품
*/
공개 정적 요소 getRootElement(문서 문서) {
document.getRootElement()를 반환합니다.
}
}