좋아, 내가 먼저 할 일은 사용자 정의 DefaultHandler
을 다음과 같이 작성하는 것입니다.
public class PrintXMLwithSAX extends DefaultHandler {
private int embedded = -1;
private StringBuilder sb = new StringBuilder();
private final ArrayList<String> pages = new ArrayList<String>();
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(qName.equals("page")){
embedded++;
}
if(embedded >= 0) sb.append("<"+qName+">");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if(embedded >= 0) sb.append(new String(ch, start, length));
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if(embedded >= 0) sb.append("</"+qName+">");
if(qName.equals("page")) embedded--;
if(embedded == -1){
pages.add(sb.toString());
sb = new StringBuilder();
}
}
public ArrayList<String> getPages(){
return pages;
}
}
DefaultHandler
(구문 분석시) 각 요소를 통해 실행 및
startElement()
,
characters()
,
endElement()
과 몇 가지 다른를 호출합니다. 위 코드는
startElement()
의 요소가
<page>
요소인지 확인합니다. 034보다 큰 경우
embedded
을 1 씩 증가시킵니다. 그 후에 각 메소드는
embedded
이> = 0인지 확인합니다. 허용되는 경우 각 요소 내부의 문자와 태그 (이 특정 예에서는 속성 제외)를
StringBuilder
에 추가합니다 목적.
endElement()
은
</page>
요소의 끝을 찾으면
embedded
을 감소시킵니다. 임베디드가 -1로 떨어지면 더 이상 일련의 페이지 요소에 포함되지 않으므로
StringBuilder
의 결과를
ArrayList
pages
에 추가하고
StringBuilder
을 새로 시작하여 다른
<page>
요소를 기다립니다.
그런 다음 핸들러를 실행 한 다음 <page>
요소가 포함 된 문자열 ArrayList
을 검색해야합니다.
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
PrintXMLwithSAX handler = new PrintXMLwithSAX();
InputStream input = new FileInputStream("C:\\Users\\me\\Desktop\\xml.xml");
saxParser.parse(input, handler);
ArrayList<String> myPageElements = handler.getPages();
지금 myPageElements
문자열 모든 페이지 요소 및 내용을 포함하는 ArrayList
입니다.
이 정보가 도움이되기를 바랍니다.
그럼 어떻게 그 텍스트를 반환 하시겠습니까? String 객체처럼? –
Jeah. ' '요소 중 일부에 대해 DOM 트리를 작성하고 싶습니다. 그러나 모든 사람들을 위해이 작업을 수행하지 않으려합니다. 비록 작동한다면 아무것도없는 것보다 낫습니다. –
좋아요,''태그와 그 내용을 문자열로 받아들이는 것은 DOM이 있다는 것을 의미하지는 않지만 예제를 함께 작성하고 답변을 작성해 드리겠습니다. –