2010-12-23 12 views
1

Java EE 5 용으로 태양의 Cursor-to-Event Example을 사용하여 StAX으로 XML을 구문 분석하는 권장 방법을 따르려고합니다. Cursor API를 통해 XML을 트래버스하고 필요에 따라 XMLEventAllocator을 사용하여 XMLEvent을 할당해야합니다.XMLEventAllocator의 인스턴스를 가져 오는 방법은 무엇입니까?


태양의 자신의 예제는 컴파일되지 않습니다 (적어도 JDK 1.6에서는 1.5 코드를 준수 함에도 불구하고 컴파일되지 않습니다). 이 예에서는 new을 통해 할당자를 인스턴스화하려고하지만 JDK의 해당 구현 클래스는 외부에서 액세스 할 수 없습니다.


JavaDocs를 읽고 웹 검색을 수행 한 결과 나는 아무것도 발견하지 못했습니다. JDK의에서 완벽하게 좋은 구현이있을 때 어려운 바로 그것을 얻을 수 있습니다 StAX의 전문가가되지 않는 외에,


하나는 처음부터 XMLEventAllocator 인터페이스를 구현할 수 있지만, 정말 잘못된 것 같습니다.

답변

2

나는이 예제를 StAX를 사용하는 모범 사례로 사용하지 않을 것입니다. StAX에는 XMLStreamReader와 XMLEventReader의 두 가지 접근 방식이 있습니다. 둘 다 XML 문서의 깊이 우선 탐색을위한 이벤트에 액세스하기위한 API를 제공합니다. XMLStream 리더를 사용하면 이벤트 유형에 따라 XMLStreamReader에서 정보를 요청할 수 있으며 XMLEventReader를 사용하면 원본 이벤트를 나타내는 객체가 제공됩니다.

XMLStreamReader API를 직접 사용하는 것이 좋습니다.

2

커서 API를 직접 사용하는 것의 제안을 넘어서서 이벤트 API를 사용하려는 경우에도 사용자 정의 XMLEventAllocation 구현을 정의 할 필요가 전혀 없습니다. 원하는 경우 (even 객체와 함께 전달할 데이터를 추가하는 등) 원하는대로 할 수 있지만 고급 기술입니다. 당신이 이벤트 API를 사용하려는 경우

그래서, 그냥 그렇게처럼, XMLEventReader의 생산으로 XMLInputFactory에게 물어

XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream("file.xml")); 

또는 당신은에 XMLStreamReader있는 경우 :

XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(streamReader); 

을하고는 당신이 필요로하는 모든입니다 해야 할 것.

소년, 자습서에 어리석은 코드 조각이있는 이유는 모르겠지만 전혀 이해가되지 않습니다. :-)

+0

감사합니다. StaxMan. 두 번째 접근법은 이벤트 API를 완전히 포기하기 전에 내가이 문제를 우회하는 것입니다. uncompilable 예에 관해서는 - 단지 거기 앉아있는 것이 아니라 심지어 태양의 튜토리얼에 따라 모범 사례로 광고되기도합니다 :) 놀라운 – kostja

+0

그래, 농담하지 마라. 잘못된 자습서는 아무 것도없는 것보다 나쁩니다. – StaxMan

관련 문제