XML 처리를 위한 Java API
Java API for XML Processing컴퓨팅에서 자바 API for XML Processing 또는 자바 XML Application 프로그래밍 인터페이스 중 하나인 JAXP(//dʒækspiː/JACS-pee)는 XML 문서를 검증하고 구문 분석하는 기능을 제공한다.여기에는 다음과 같은 3가지 기본 구문 분석 인터페이스가 있다.
- Document Object Model 구문 분석 인터페이스 또는 DOM 인터페이스
- XML 구문 분석 인터페이스 또는 색스 인터페이스용 단순 API
- XML 또는 StAX용 스트리밍 API(JDK 6의 일부, JDK 5에 별도의 병 사용 가능)
구문 분석 인터페이스 외에도 API는 XML 문서에 데이터와 구조 변환을 제공하는 XSLT 인터페이스를 제공한다.
JAXP는 JSR 5 (JAXP 1.0), JSR 63 (JAXP 1.1 및 1.2), JSR 206 (JAXP 1.3)으로 자바 커뮤니티 프로세스에 따라 개발되었다.
| 자바 SE 버전 | JAXP 버전 번들 |
|---|---|
| 1.4 | 1.1 |
| 1.5 | 1.3 |
| 1.6 | 1.4 |
| 1.7.0 | 1.4.5 |
| 1.7.40 | 1.5 |
| 1.8 | 1.6[1] |
JAXP 버전 1.4.4는 2010년 9월 3일에 발매되었다.JAXP 1.3은 2008년 2월 12일 폐기로 선언되었다.
DOM 인터페이스
DOM 인터페이스는 전체 XML 문서를 구문 분석하며, 클래스를 사용하고 문서 객체 모델 레벨 2 핵심 사양에 있는 개념을 모델링하여 문서의 완전한 메모리 내 표현을 구성한다.
DOM 파서를 a라고 한다.DocumentBuilder인메모리 구축 시Document대변의havax.xml.parers.DocumentBuilder는 javax.xml.parsers에 의해 생성된다.DocumentBuilderFactory.그DocumentBuildera를 창조하다.org.w3c.dom.Document인스턴스(instance) - XML 문서의 노드를 포함하는 트리 구조.구조물의 각 트리 노드는org.w3c.dom.Node접점각각 XML 문서에서 발견된 데이터 유형을 나타내는 다양한 유형의 트리 노드 중에서 가장 중요한 것은 다음과 같다.
- 속성을 가질 수 있는 요소 노드
- 문서 요소의 시작 태그와 끝 태그 사이에 있는 텍스트를 나타내는 텍스트 노드.
색스 인터페이스
havax.xml.parers.SAXParserFactory는 SAXParser라고 불리는 SAXParser를 만든다.DOM 파서와 달리, 색스 파서는 XML 문서의 메모리 내 표현을 생성하지 않기 때문에 더 빨리 실행되고 더 적은 메모리를 사용한다.대신, 색스 파서는 콜백을 호출하여, 즉 org.xml.sax.helpers에서 메서드를 호출하여 XML 문서 구조를 고객에게 알려준다.파서에 제공된 DefaultHandler 인스턴스.이러한 문서 접근 방식을 스트리밍 XML이라고 한다.
그DefaultHandler클래스는 ContentHandler, ErrorHandler, DTDHandler 및 EntityResolver 인터페이스를 구현한다.대부분의 고객은 에 정의된 방법에 관심이 있을 것이다.ContentHandlerXX 파서가 XML 문서에서 해당 요소를 발견하면 호출되는 인터페이스.이 인터페이스에서 가장 중요한 방법은 다음과 같다.
startDocument()그리고endDocument()XML 문서의 시작과 끝에서 호출되는 메서드startElement()그리고endElement()문서 요소의 시작과 끝에서 호출되는 방법characters()XML 문서 요소의 시작 태그와 끝 태그 사이에 포함된 텍스트 데이터 컨텐츠로 호출되는 방법.
클라이언트가 의 하위 클래스를 제공함DefaultHandler이 방법을 무시하고 데이터를 처리한다.여기에는 데이터를 데이터베이스에 저장하거나 스트림에 쓰는 작업이 포함될 수 있다.
파싱하는 동안 파서는 외부 문서에 접근할 필요가 있을 수 있다.XML 카탈로그를 사용하여 자주 사용하는 문서의 로컬 캐시를 저장할 수 있다.
이것은 2000년 5월에 자바 1.3과 함께 도입되었다.[2]
StAX 인터페이스
StAX는 DOM과 SAX 인터페이스 사이의 중앙값으로 설계되었다.그 은유에서 프로그램적 진입점은 문서 내의 한 점을 나타내는 커서다.응용 프로그램은 커서를 앞으로 이동시켜 필요에 따라 파서로부터 정보를 '끌어낸다'.이는 애플리케이션에 데이터를 '푸시'하는 이벤트 기반 API(예: SAX)와 달리, 응용프로그램이 문서 내의 위치를 추적하기 위해 필요에 따라 이벤트 간 상태를 유지하도록 요구하는 것과 다르다.
XSLT 인터페이스
XML 스타일시트 변환 언어(XSLT)는 XML 문서를 다른 형태의 데이터로 변환할 수 있도록 허용한다.JAXP는 응용프로그램이 XSLT 변환을 호출할 수 있도록 패키지 javax.xml.transform에 인터페이스를 제공한다.이 인터페이스는 원래 TraAX(Transformation API for XML)라고 불렸으며, 다수의 자바 XSLT 프로세서의 개발자들 간의 비공식 협업에 의해 개발되었다.
인터페이스의 주요 특징은
- 응용 프로그램이 사용할 XSLT 프로세서를 동적으로 선택할 수 있는 공장 클래스(TransferFactory, TransferFactory, TransformerFactory).NewInstance(), TransformerFactory.newInstance(java.lang).문자열,_java.lang.ClassLoader)).
- 스타일시트의 컴파일된 형식을 나타내는 템플릿 객체를 만드는 공장 클래스의 메서드.이것은 여러 원본 문서(또는 매개변수가 다른 동일한 원본 문서)에 동일한 스타일시트를 적용하기 위해 연속적으로 또는 병렬로 반복적으로 사용할 수 있는 스레드 세이프 오브젝트(TransflectorFactory.newTemplates(javax.xml.transform).Source), 또한 TransformerFactory.newTransfer(javax.xml.transform).Source), TransformerFactory.newTransfer()는 스타일시트의 실행 가능한 형식을 나타내는 Templates 객체의 Transformer 생성 방법이며, 연속적으로 재사용할 수는 있지만 스레드 간에 공유할 수 없다.Transformer는 스타일시트 파라미터와 직렬화 옵션(예: 출력을 들여써야 하는지 여부)을 설정하는 방법과 변환을 실제로 실행하는 방법을 제공한다. (Transfore.transform(javax.xml.transform).소스,_javax.xml.transform.결과)).
두 개의 추상 인터페이스 Source와 Result는 변환의 입력과 출력을 나타내기 위해 정의된다.이것은 프로세서가 인터페이스를 구현하는 어떤 클래스도 수용할 것으로 예상되지 않기 때문에 Java 인터페이스의 다소 파격적인 사용이다. 각 프로세서는 처리할 소스 또는 결과의 종류를 선택할 수 있다.실제로 모든 JAXP 프로세서는 세 가지 표준 종류의 소스를 지원한다.DOMSource,SAXSource,StreamSource) 및 세 가지 표준 유형의 결과(DOMResult,SAXResult,StreamResult) 및 다른 구현도 가능하다.
예
XSLT 변환 시작의 가장 원시적이지만 완전한 예는 다음과 같다.
/* 파일 src/예제/xslt/XsltDemo.java */ 꾸러미 예제.xslt; 수입하다 java.io.스트링리더; 수입하다 java.io.스트링 라이터; 수입하다 javax.xml.properties.변압기; 수입하다 javax.xml.properties.트랜스포머Exception; 수입하다 javax.xml.properties.트랜스포머팩토리; 수입하다 javax.xml.properties.TransformerFactoryConfigurationError; 수입하다 javax.xml.dll.stream.stream.스트림 결과; 수입하다 javax.xml.dll.stream.stream.스트림소스; 공중의 계급 엑스슬트데모 { 공중의 정태의 공허하게 하다 본래의(끈[] 아그) 던지다 TransformerFactoryConfigurationError, 트랜스포머Exception { 끈 xsltResource = "<?xml 버전='1.0' 인코딩='UTF-8'?>\n"+ "<xsl:스타일시트 버전='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>\n"+ "xsl:출력 방법='xml' indent='no'/>\n"+ "xsl:match='/'\n"+ "<re루트><reRoot><reNode:val-of select='/root/node/@val' / world</reNode></reRroot>\n"+ "/xsl:properties"\n"+ "[/xsl:스타일시트]"; 끈 xmlSourceResource = "<?xml 버전='1.0' 인코딩='UTF-8'?>\n"+ "<root><node val='hello'/"root"; 스트링 라이터 xmlResultResource = 새로운 스트링 라이터(); 변압기 xml트랜스포머 = 트랜스포머팩토리.newInstance().뉴트랜스포머( 새로운 스트림소스(새로운 스트링리더(xsltResource)) ); xml트랜스포머.변형시키다( 새로운 스트림소스(새로운 스트링리더(xmlSourceResource)), 새로운 스트림 결과(xmlResultResource) ); 시스템.밖으로.인쇄하다(xmlResultResource.겟버퍼().토스트링()); } } 다음과 같은 하드 코딩된 XSLT 변환을 적용한다.
<?xml 버전='1.0' 인코딩='UTF-8'?> <xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:output method='xml' indent='no'/> <xsl:template match='/'> <reRoot><reNode><xsl:value-of select='/root/node/@val' /> world</reNode></reRoot> </xsl:template> </xsl:stylesheet>다음 하드 코딩된 XML 문서로 이동:
<?xml 버전='1.0' 인코딩='UTF-8'?> <근본>. val='여보세요'/></루트> 실행 결과는 다음과 같다.
<?xml 버전="1.0" 인코딩="UTF-8"?<reRoot><reRoot> hello world</reNode></reRoot>참조
- ^ "The Java Community Process(SM) Program - JSRS: Java Specification Requests - detail JSR# 206".
- ^ Java 1.2.1 API 인덱스와 1.3 인덱스를 비교하십시오.Java 사양 요청서 (JSR) 5, XML 구문 분석 사양은 2000년 3월 21일에 완료되었다.