dom4jjj 패키지에서 xml 파일을 읽는 방법
<?xml version="1.0" encoding="utf-8"?>
<ACCESOS>
<item>
<SOCIO name="adsf">
<NUMERO>00045050</NUMERO>
<REPOSICION>0</REPOSICION>
<NOMBRE>MOISES MORENO</NOMBRE>
<TURNOS>
<LU>T1</LU>
<MA>T2</MA>
<MI>T3</MI>
<JU>T4</JU>
<VI>T5</VI>
<SA>T6</SA>
<DO>T7</DO>
</TURNOS>
</SOCIO>
</item>
<item>
<SOCIO name="adsfa">
<NUMERO>00045051</NUMERO>
<REPOSICION>0</REPOSICION>
<NOMBRE>RUTH PENA</NOMBRE>
<TURNOS>
<LU>S1</LU>
<MA>S2</MA>
<MI>S3</MI>
<JU>S4</JU>
<VI>S5</VI>
<SA>S6</SA>
<DO>S7</DO>
</TURNOS>
</SOCIO>
</item>
</ACCESOS>
다음은 코드:
public void read(){
try {
Document doc = new SAXReader().read(new File("src/user.xml"));
List<Element> itemList = doc.selectNodes("/ACCESOS/item/SOCIO");
for (Iterator<Element> iter = itemList.iterator(); iter.hasNext();){
Element element = iter.next();
System.out.println("NUMERO =" + element.elementText("NUMERO"));
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
이 코드는 Java Project에 쓰여 있습니다. 그 중에서user.xml은 src 루트 디렉터리에 놓고 클래스는 src/com/jianxin/xml에 있습니다. 상기 코드를 실행하면 결과가 나올 수 있습니다. 그러나 상기 코드를 포장하면 이jar 패키지 내의 디렉터리는com/jianxin/xmluser입니다.xml은 여기 방법에서 src로 내려가서 사용자를 찾습니다.xml, src/경로를 제거해도 jar에 있는 user를 찾을 수 없습니다.xml상.이것은 주로jar패키지는 폴더가 아닌 단독 파일이기 때문에'file:/d:.../user.xml'이라는 형식을 통해 파일을 포지셔닝할 수 없기 때문에 상대적인 경로라도jar파일 내의 파일을 포지셔닝할 수 없습니다.그러면 xml을jar 패키지에 넣습니다.user를 막론하고.xml은 어느 디렉터리에서jar 패키지의 클래스를 찾을 수 있습니까? 이것은 환상입니까?물론 아닙니다. 우리는 클래스 로더(ClassLoader)로 할 수 있습니다. 1) 클래스 로더는 클래스 로더의 추상적인 클래스입니다.이것은 실행할 때 동적으로 불러오는 클래스의 실행 정보를 얻을 수 있습니다.이렇게 말할 수 있다. 우리가 xml을 호출할 때.jar의 ReadXML 클래스가 있을 때, JVM은 ReadXML 클래스에 불러오고 ReadXML이 실행될 때 정보(jar 패키지의 루트 경로 정보 포함)를 기록합니다.ClassLoader 클래스의 방법은 이러한 정보를 동적으로 얻을 수 있도록 도와줍니다: a.public URL getResource(String), 이름이 지정된 자원을 찾을 수 있습니다.b.public InputStream get Resource As Stream(String name), 지정한 자원 입력 흐름 2로 되돌아오기) ClassLoader는 abstract이므로 실례화할 수 없습니다.우리가 진정으로 코드를 쓸 때는 Class 클래스의 get Resource와 get Resource As Stream 방법을 통해 이 두 가지 방법은 Class Loader의 get Resource와 get Resource As Stream 방법을 의뢰합니다.이제 위 방법을 다시 작성합니다.
public void read(){
try {
InputStream is=this.getClass().getResourceAsStream("/user.xml");
Document doc = new SAXReader().read(is);
List<Element> itemList = doc.selectNodes("/ACCESOS/item/SOCIO");
for (Iterator<Element> iter = itemList.iterator(); iter.hasNext();){
Element element = iter.next();
System.out.println("NUMERO =" + element.elementText("NUMERO"));
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
이렇게 하면 포장하기 전에 운행하는 것은 문제가 없다. 포장을 한 후에도 여전히 운행하여 데이터를 찾을 수 있다.여기서 가장 중요한 것은 Class를 얻는 동시에 jar근 디렉터리 정보를 얻을 수 있고 ClassLoader도 바뀔 수 있다는 점이다. 이 점은 주의해야 한다. 도대체 어떤 변화인지는 현재 나도 말할 수 없다. 단지 이런 문제에 부딪혔을 뿐이다.그래서 자바의 밑바닥을 비교하는 책을 한 권 보고 다른 사람을 위해 물건을 봉인할 때 더욱 마음을 기울이고 응용 단계에 머물러 있는 우리도 JVM에 대해 깊이 있게 이해할 때가 되었다.요즘은 대부분의 시간을 개발하고 있습니다. 약속한jira가 더 늦을 수도 있습니다. 하는 과정에서 dwr를 사용했습니다. 다음 편에서 설명합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java xpath와dom4j로 xml 해석일반적으로 XML 파일을 분석하는 데는 네 가지 고전적인 방법이 있다.기본적인 해석 방식은 두 가지가 있는데 하나는 SAX이고 다른 하나는 DOM이다.SAX는 이벤트 흐름 기반, DOM은 XML 문서 트리 구조 기반...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.