Java의 XML 해석에 가장 적합한 라이브러리는 무엇입니까?
자바 라이브러리에서 XML(복잡한 구성과 데이터 파일)을 검색하고 있는데, 검색은 좀 했지만 dom4j(V2에서 동작하고 있는 것 같습니다) 이외에는 찾을 수 없었습니다.공통 구성을 살펴보았지만 마음에 들지 않았습니다. XML 상의 다른 아파치 프로젝트는 휴지 상태에 있는 것 같습니다.저는 dom4j를 직접 평가한 적은 없지만 알고 싶습니다.java에는 다른 (Good) 오픈 소스 xml 파싱 라이브러리가 있나요?dom4j에 대한 경험은 어때?
@Voo의 답변 후에 다른 질문을 드리겠습니다.Java의 빌트인 클래스를 사용할지, 아니면 dom4j와 같은 서드파티 라이브러리를 사용할지.어떤 장점이 있습니까?
실제로 Java는 XML을 즉시 해석하기 위해 다음 4가지 방법을 지원합니다.
DOM 파서/빌더:XML 구조 전체가 메모리에 로드되어 잘 알려진 DOM 방식을 사용하여 작업할 수 있습니다.또한 DOM을 사용하면 Xslt 변환으로 문서에 쓸 수 있습니다.예제:
public static void parse() throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = factory.newDocumentBuilder();
File file = new File("test.xml");
Document doc = builder.parse(file);
// Do something with the document here.
}
SAX 파서: XML 문서 읽기 전용.Sax 파서는 문서를 실행하고 사용자의 콜백 메서드를 호출합니다.문서의 시작/종료 방법, 요소 등이 있습니다.org.xml.sax에 정의되어 있습니다.ContentHandler와 빈 도우미 클래스 DefaultHandler가 있습니다.
public static void parse() throws ParserConfigurationException, SAXException {
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
SAXParser saxParser = factory.newSAXParser();
File file = new File("test.xml");
saxParser.parse(file, new ElementHandler()); // specify handler
}
StAx 리더/라이터:이것은 데이터 스트림 지향 인터페이스와 연동됩니다.프로그램은 커서/반복기처럼 다음 요소가 준비되면 다음 요소를 요구합니다.또한 이를 사용하여 문서를 작성할 수도 있습니다.문서 읽기:
public static void parse() throws XMLStreamException, IOException {
try (FileInputStream fis = new FileInputStream("test.xml")) {
XMLInputFactory xmlInFact = XMLInputFactory.newInstance();
XMLStreamReader reader = xmlInFact.createXMLStreamReader(fis);
while(reader.hasNext()) {
reader.next(); // do something here
}
}
}
문서 쓰기:
public static void parse() throws XMLStreamException, IOException {
try (FileOutputStream fos = new FileOutputStream("test.xml")){
XMLOutputFactory xmlOutFact = XMLOutputFactory.newInstance();
XMLStreamWriter writer = xmlOutFact.createXMLStreamWriter(fos);
writer.writeStartDocument();
writer.writeStartElement("test");
// write stuff
writer.writeEndElement();
}
}
JAXB: XML 문서를 읽기 위한 최신 구현:v2의 Java 6의 일부입니다.이를 통해 문서에서 Java 개체를 직렬화할 수 있습니다.javax.xml.bind에 대한 인터페이스를 구현하는 클래스로 문서를 읽습니다.Unmarshaller(JAXBContext.newInstance에서 이 클래스 취득).컨텍스트는 사용된 클래스로 초기화해야 하지만 루트 클래스만 지정하면 되고 정적 참조 클래스는 걱정할 필요가 없습니다.주석을 사용하여 요소가 되는 클래스(@XmlRootElement)와 요소가 되는 필드(@XmlElement) 또는 Attribute(@XmlAttribute, swell surprise!)를 지정할 수 있습니다.
public static void parse() throws JAXBException, IOException {
try (FileInputStream adrFile = new FileInputStream("test")) {
JAXBContext ctx = JAXBContext.newInstance(RootElementClass.class);
Unmarshaller um = ctx.createUnmarshaller();
RootElementClass rootElement = (RootElementClass) um.unmarshal(adrFile);
}
}
문서 쓰기:
public static void parse(RootElementClass out) throws IOException, JAXBException {
try (FileOutputStream adrFile = new FileOutputStream("test.xml")) {
JAXBContext ctx = JAXBContext.newInstance(RootElementClass.class);
Marshaller ma = ctx.createMarshaller();
ma.marshal(out, adrFile);
}
}
오래된 강의 슬라이드를 뻔뻔하게 베낀 예;-)
편집: "어떤 API를 사용해야 합니까?"에 대해모든 API가 보이는 것과 같은 기능을 가진 것은 아니지만 XML 문서를 매핑하는 데 사용하는 클래스를 제어할 수 있다면 JAXB는 개인적으로 매우 우아하고 단순한 솔루션입니다(대규모 문서에는 사용하지 않지만 조금 복잡해질 수 있습니다).SAX도 꽤 사용하기 쉽고, 만약 당신이 그것을 사용하는 좋은 이유가 없다면 DOM에서 멀리 떨어져 있어야 한다 - 내 생각에 오래되고 투박한 API.STL에 없는 유용한 기능을 갖춘 최신 서드파티 라이브러리는 없다고 생각합니다.표준 라이브러리는 테스트, 문서 작성 및 안정성이 뛰어나다는 일반적인 장점이 있습니다.
Java는 XML을 즉시 구문 분석할 수 있는 두 가지 방법을 지원합니다.
색소폰
큰 XML 파일을 구문 분석하거나 메모리를 많이 사용하지 않으려면 이 파서를 사용할 수 있습니다.
http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html
예: http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
DOMParser
XPath 쿼리를 수행해야 하거나 전체 DOM을 사용할 수 있어야 하는 경우 이 파서를 사용할 수 있습니다.
http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/DocumentBuilderFactory.html
예: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
XML 파서가 문서를 요소 및 속성 노드의 트리로 변환하는 DOM과 유사한 API를 원하는 경우, DOM 자체, JDOM, DOM4J 및 XOM의 4개 이상의 API 중에서 선택할 수 있습니다.DOM을 사용하는 유일한 이유는 DOM이 표준으로 인식되어 JDK로 제공되기 때문입니다.다른 모든 면에서 DOM이 우수합니다.심플함, 파워, 퍼포먼스를 겸비한 XOM을 선호합니다.
물론 다른 처리 스타일도 있습니다.저레벨 파서인터페이스(SAX 및 StAX), 데이터 객체바인딩 인터페이스(JAXB), 고급 선언 언어(XSLT, XQuery, XPath)입니다.프로젝트 요건과 개인의 취향에 따라 어느 것이 가장 좋은가.
니키타의 요점은 훌륭하다: 성숙과 나쁨을 혼동하지 마라.XML은 크게 변하지 않았습니다.
JDOM은 DOM4J의 또 다른 대안입니다.
Java의 XML 구문 분석에는 외부 라이브러리가 필요하지 않습니다.Java는 오랫동안 SAX와 DOM을 위한 빌트인 구현을 제공해 왔습니다.
JDOM 사용에 관심이 있지만 오랫동안 업데이트가 되지 않은 것(특히 Java 범용 기술을 활용하지 않음)을 우려하는 분들을 위해 이러한 측면을 정확하게 해결하고 JDOM API를 현대화하는 CoffeeDOM이라는 포크가 있습니다. 자세한 내용은 여기를 참조하십시오.
http://cdmckay.org/blog/2011/05/20/introducing-coffeedom-a-jdom-fork-for-java-5/
프로젝트 페이지에서 다운로드할 수 있습니다.
https://github.com/cdmckay/coffeedom
VTD-XML은 무거운 XML 구문 분석 lib...그것은 사실상 모든 면에서 다른 것보다 낫다...Java 플랫폼에서 사용할 수 있는 모든 XML 프로세싱 프레임워크를 분석한 2013년 논문입니다.
http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf
언급URL : https://stackoverflow.com/questions/5059224/which-is-the-best-library-for-xml-parsing-in-java
'programing' 카테고리의 다른 글
정수 나눗셈의 동작은 무엇입니까? (0) | 2022.08.07 |
---|---|
Nuxt server Middleware가 API에서 json을 가져옵니다. (0) | 2022.08.07 |
어레이를 인라인으로 선언할 방법이 있습니까? (0) | 2022.08.07 |
C 메모리 관리 (0) | 2022.08.07 |
Handler()가 폐지되면 무엇을 사용할 수 있습니까? (0) | 2022.08.07 |