XStream을 매우 쉽게 (더 안드로이드에서 작동하지 않습니다 의존성).
단순 또는 JAXB와 같은 ORM 라이브러리가 아니며 대신 끌어 오기 구문 분석 사양에서 제공하는 최대 구문 분석 성능에 초점을 맞추지 만 XPath를 시작하면 쉽게 구문 분석 규칙을 정의 할 수 있습니다. 끌어 오기 파서의 상태를 직접 관리합니다. 당신은 규칙의 수를 정의하고 제공
IRule linkRule = new DefaultRule(Type.CHARACTER, "/rss/channel/item/link") {
@Override
public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
// 'text' is the link; store it, print it, whatever you need...
}
}
: (이 함께 내장 내의 RSS 파서 예이다)과 같이
예를 들어, 당신은 규칙으로 XML의 특정 요소를 대상 것이다 XMLParser (다시 사용할 수 있음)의 인스턴스에 추가 한 다음 XML에 대한 InputStreams를 해당 규칙에 따라 구문 분석합니다.
끌어 오기 구문 분석기의 SJXP ontop의 구문 분석 오버 헤드는 0에 가까우며 (메모리 및 CPU 오버 헤드 모두) 문자 그대로 1 회 해시 코드 계산에 이른 다음 정수 비교가 발생하여 규칙에 일치하는 규칙이 있는지 확인합니다 내용을 통해 실행되는 XML 파서의 현재 위치입니다.
이 속성과 문자 데이터를 지원 - 라이브러리도 예를 들어 ... [] 표기법을 사용하여 네임 스페이스를 지원하는 멋지고 우아한 방법이 있습니다 도서관이에 의미되지 않았다
IRule channelSubjectRule = new DefaultRule(Type.CHARACTER, "/rss/channel/[http://purl.org/dc/elements/1.1/]subject") {
@Override
public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
// Got the Channel's dc:subject value! I win!
}
}
당신에게서 모든 것을 숨기는 또 다른 불가사의 한 추상화가 되십시오. 이보다 약간 낮은 수준이지만 임베디드 또는 고성능 시스템을위한 구문 분석 프로세스에 메모리 또는 CPU가 부풀려지지 않고 직접 STAX 구문 분석보다 높습니다 (장기 실행 스파이더 프로세스에 사용되는 피드 구문 분석기 용으로 작성되었습니다).).
감사합니다. 당신이 제안한 것이 훌륭하지만, 복잡한 XML 스키마에 가장 적합하다고 생각하기 때문에 주석 지향적 인 것을 찾고 있습니다. 관계가 매우 스파게티이기 때문입니다. 아시다시피, 제발 어노테이션 지향적 인 것을 제게 제공해주십시오. –
모하메드, 안타깝게도 안드로이드 및 어노테이션 기반 작업에 대한 간단한 XML 만 권장합니다. 죄송합니다. –