처음에 XML 언어는 단지 HTML 언어를 대체하도록 의도되었습니다. 그러나 언어가 계속 발전하고 개선됨에 따라 사람들은 확장 가능한 마크업 언어 및 엄격한 구문, 사용 능력과 같은 장점을 점점 더 많이 발견하고 있습니다. 의미 있는 마크업, 콘텐츠 저장과 표시의 분리, 기타 장점 덕분에 언어는 탄생한 순간부터 훌륭해졌습니다. XML 언어는 W3C 표준이 된 후 급속한 발전의 시대에 접어들었습니다. 물론 그 자체의 일련의 장점으로 인해 주요 기술 제조업체도 소프트웨어 산업의 개발 기술로서 Java를 선호하게 되었습니다. 이에 따라 XML을 지원하는 다양한 도구가 등장했습니다. 이 기사에서는 이러한 관점에서 Java에서 XML을 처리하는 몇 가지 주요 기술을 소개합니다.
프로그래머가 XML을 처리할 수 있도록 Java에는 어떤 우수한 클래스 라이브러리와 도구가 있습니까?
세 가지 XML 구문 분석 방법 소개: 유명한 DOM
DOM은 XML 처리를 위한 W3C 표준 API로 유명하다고 해도 과언이 아니다. MS.NET 등이 표준으로 가장 널리 사용되는 XML 처리 방법이 되었습니다. 물론, 더욱 강력한 기능을 제공하기 위해 Java에는 많은 Java 프로그래머에게 친숙한 JDOM, DOM4J 등과 같은 DOM용 직접 확장 도구 클래스가 많이 있습니다. 이는 기본적으로 DOM 인터페이스 기능을 확장한 것입니다. 많은 DOM API의 특성으로 인해 많은 원래 DOM 프로그래머는 직관적이고 조작하기 쉬운 방법으로 인해 대다수의 Java 프로그래머에게 깊은 사랑을 받았습니다.
친환경적이고 친환경적인 SAX
SAX의 출현에는 특별한 요구 사항이 있습니다. 친환경적이고 환경 친화적이라고 말하는 이유는 SAX가 XML 처리를 지원하기 위해 최소한의 시스템 리소스와 가장 빠른 구문 분석 방법을 사용하기 때문입니다. 그러나 그에 따른 지루한 검색 방법은 대부분의 프로그래머에게 많은 문제를 가져오고 종종 골치 아픈 일을 야기합니다. 동시에 XPath 쿼리 기능에 대한 지원으로 인해 사람들은 이를 좋아하고 싫어하게 됩니다.
잘 알려지지 않은 Digester: XML의 JavaBeanization
Digester는 Apache Foundation의 오픈 소스 프로젝트로, 이에 대한 저자의 이해는 Struts 프레임워크에 대한 연구에서 비롯되었습니다. 주요 오픈 소스 프레임워크의 설계를 이해하고 싶거나 심지어 강력한 프레임워크를 직접 작성하고 싶은 프로그래머도 많이 있습니까? 다음과 같은 문제에 직면하게 될 것입니다. XML 언어로 표시된 이러한 다양한 프레임워크 구성 파일을 구문 분석하기 위해 프레임워크 하단에서 어떤 기술이 사용됩니까? DOM 구문 분석은 시간이 많이 걸리고, SAX 구문 분석은 너무 번거롭고, 각 구문 분석에 대한 시스템 오버헤드가 너무 높을 것입니다. 그래서 이 정보를 로드하려면 XML 구조에 해당하는 JavaBeans를 사용해야 한다고 모두가 생각했고, Digester가 탄생했습니다. 그 출현은 XML을 JavaBean 객체로 변환해야 하는 편리한 작업 인터페이스를 제공하므로 더 유사한 요구 사항이 더 완벽한 솔루션을 얻을 수 있으며 프로그래머는 더 이상 번거로운 구문 분석 절차를 직접 구현할 필요가 없습니다. 동시에 SUN은 XML 및 JavaBean 변환 도구 클래스인 JAXB도 출시했으며 관심 있는 독자는 스스로 학습할 수 있습니다.
Java DOM 구문 분석 XML의 예를 살펴보겠습니다.
import java.io.*; import org.xml.sax.SAXException; import javax.xml.parsers.* { public static void main(String[] args) { DocumentBuilderFactory 공장 = DocumentBuilderFactory.newInstance(); 시도 { DocumentBuilder 빌더 = 공장.newDocumentBuilder(); builder.parse(new File("E://work//test//xml1.xml")); NodeList nl = doc.getElementsByTagName("book") for (int i = 0; i < nl.getLength( ); i++) { System.out.println(nl.item(i).getAttributes().item(0)); System.out.println(doc.getElementsByTagName("title").item(i) .getFirstChild().getNodeValue()) System.out.println(doc.getElementsByTagName("title").item(i) .getAttributes ().item(0)); System.out.println(doc.getElementsByTagName("author").item(i) .getFirstChild().getNodeValue()); System.out.println(doc.getElementsByTagName("year").item(i) .getFirstChild ().getNodeValue()); System.out.println(doc.getElementsByTagName("price").item(i) .getFirstChild().getNodeValue()); System.out.println() } } catch (ParserConfigurationException e) { e.printStackTrace() ; } catch (SAXException e) { e.printStackTrace() } catch (IOException e); e.printStackTrace() } } }
XML:
<서점> <book Category="COOKING"> <title lang="en">일상 이탈리아어</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price > </book> <book Category="CHILDREN"> <title lang="en">해리 포터</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99 </가격> </book> <book Category="WEB"> <title lang="en">XML 학습</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95< /가격> </book> </서점>
결과:
Category="COOKING"Everyday Italianlang="en"Giada De Laurentiis200530.00category="CHILDREN"Harry Potterlang="en"J K. Rowling200529.99category="WEB"Learning XMLlang="en"Erik T. Ray200339.95