거대한 XML이 있습니다. 그 파일을 구문 분석하고 모든 <elem/>
을 하나의 문자열로 가져와 데이터베이스에 저장해야하지만 파일 크기가 (~ 500MB)이므로 메모리 사용 공간이 적은의 메서드를 사용하면됩니다. 그렇게하는 방법 ? 그렇게하는 유용한 예제를 찾고 있습니다. 예 아래 내되지 매우 좋은 해결책 : 분할 후XML을 분할하는 방법은 무엇입니까? 예를 들면?
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<header>...<header>
<elem>
<a/><b/><c>...</c>
</elem>
<elem>
<a>...</a><b/><c>...</c>
</elem>
<elem>
<a>...</a>
</elem>
...
</doc>
:
이제{'<elem/>', '<elem/>', ...}
내가 아래와 같이 SAX DefaultHandler를 사용해,하지만 난이 좋은 해결책이 아니라고 생각 :
class DataFileParser extends DefaultHandler {
StringBuffer sb;
boolean sElem = false; // is elem
...
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(sElem) {
sb.append("<"+qName+">");
}
if (qName.equalsIgnoreCase("elem")) {
sb = new StringBuffer();
sb.append("<"+qName+">");
sElem = true;
}
...
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("elem")) {
sElem = false;
sb.append("</"+qName+">");
}
...
}
public void characters(char ch[], int start, int length) throws SAXException {
if(sElem) {
sb.append(new String(ch, start, length));
}
}
...
}
: 색슨-EE와 예를 들어 다음과 같은 스트리밍 변환은 트릭을 할 것입니다. 이제는 그것을 조각들로 구성해야합니다. – marioosh