Java에서 다양한 사용자 정의 XML 문서를 구문 분석하는 가장 좋은 방법

StackOverflow https://stackoverflow.com/questions/23106

  •  09-06-2019
  •  | 
  •  

문제

Java를 사용하여 여러 개의 개별 사용자 정의 XML 문서를 구문 분석하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

나는 사용할 것이다 스택스 XML을 구문 분석하는 것은 빠르고 사용하기 쉽습니다.나는 마지막 프로젝트에서 이를 사용하여 최대 24MB의 XML 파일을 구문 분석했습니다.좋은 소개가 있어요 java.net, 시작하기 위해 알아야 할 모든 것을 알려줍니다.

다른 팁

기본적으로 Java에는 두 가지 주요 XML 구문 분석 방법이 있습니다.

  • 색소폰, 여기서는 매니저 XML에서 원하는 것만 가져오고 나머지는 버립니다.
  • DOM, 파일을 전체적으로 구문 분석하고 트리와 유사한 방식으로 모든 요소를 ​​가져올 수 있습니다.

매우 유용한 또 다른 XML 구문 분석 방법은 비록 이 방법보다 조금 더 최신이고 Java6 이후에만 JRE에 포함되었지만 다음과 같습니다. StAX.StAX는 DOM의 트리 기반 접근 방식과 SAX의 이벤트 기반 접근 방식 사이의 중간 방법으로 고안되었습니다.매우 큰 문서를 구문 분석하는 것이 쉽다는 점에서 SAX와 매우 유사하지만 이 경우 응용 프로그램은 이벤트를 응용 프로그램으로 "푸시"하는 대신 파서에서 정보를 "가져옵니다".이 주제에 대한 자세한 설명을 찾을 수 있습니다. 여기.

따라서 달성하려는 목표에 따라 다음 접근 방식 중 하나를 사용할 수 있습니다.

당신은 사용하고 싶을 것입니다 org.xml.sax.XMLReader (http://docs.oracle.com/javase/7/docs/api/org/xml/sax/XMLReader.html).

구문 분석만 필요하다면 XPath 라이브러리를 사용하는 것이 좋습니다.다음은 좋은 참고 자료입니다. http://www.ibm.com/developerworks/library/x-javaxpathapi.html

그러나 XML을 객체로 변환하는 것을 고려하고 싶을 수도 있으며 그러면 한계가 없습니다.이를 위해 다음을 사용할 수 있습니다. 엑스스트림, 이것은 내가 많이 사용하는 훌륭한 라이브러리입니다

사용 dom4j 도서관

먼저 문서를 읽어보세요

import java.net.URL;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class Foo {

    public Document parse(URL url) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
}

그런 다음 XPATH를 사용하여 필요한 값을 얻으십시오.

public void get_author(Document document) {
    Node node = document.selectSingleNode( "//AppealRequestProcessRequest/author" );
    String author = node.getText();
    return author;
}

다음은 다음을 사용하여 일부 값 값을 추출하는 코드입니다. vtd-xml.

import com.ximpleware.*;

public class extractValue{
    public static void  main(String s[]) throws VTDException, IOException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", false));
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/aa/bb[name='k1']/value");
        int i=0;
        while ((i=ap.evalXPath())!=-1){
            System.out.println(" value ===>"+vn.toString(i));
        }   
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top