私は巨大な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