、あなたはSAXパーサを見てしたいことがあります。
これはイベント中心のXMLファイルの解析方法であり、解析中にターゲットファイルに直接書き込む場合には適しています。 SAX Parserはxmlの内容全体をメモリに読み込むのではなく、入力ストリームの要素をエンコーディングするときにメソッドをトリガーします。私が経験した限り、これは非常にメモリ効率の良い処理方法です。
あなたのStax-Solutionと比較して、SAXはあなたのアプリケーションにデータをプッシュします。つまり、状態を維持する必要があります。つまり、あなたの現在の状況を把握する必要がありますロケーション。「あなたは
import java.io.FileReader;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
public class SaxExample implements ContentHandler
{
private String currentValue;
public static void main(final String[] args) throws Exception
{
final XMLReader xmlReader = XMLReaderFactory.createXMLReader();
final FileReader reader = new FileReader("datasource.xml");
final InputSource inputSource = new InputSource(reader);
xmlReader.setContentHandler(new SaxExample());
xmlReader.parse(inputSource);
}
@Override
public void characters(final char[] ch, final int start, final int length) throws SAXException
{
currentValue = new String(ch, start, length);
}
@Override
public void startElement(final String uri, final String localName, final String qName, final Attributes atts) throws SAXException
{
// react on the beginning of tag "GroupBMsg" <GroupBMSg>
if (localName.equals("GroupBMsg"))
{
currentValue="";
}
}
@Override
public void endElement(final String uri, final String localName, final String qName) throws SAXException
{
// react on the ending of tag "GroupBMsg" </GroupBMSg>
if (localName.equals("GroupBMsg"))
{
// TODO: write into file
System.out.println(currentValue);
}
}
// the rest is boilerplate code for sax
@Override
public void endDocument() throws SAXException {}
@Override
public void endPrefixMapping(final String prefix) throws SAXException {}
@Override
public void ignorableWhitespace(final char[] ch, final int start, final int length)
throws SAXException {}
@Override
public void processingInstruction(final String target, final String data)
throws SAXException {}
@Override
public void setDocumentLocator(final Locator locator) { }
@Override
public void skippedEntity(final String name) throws SAXException {}
@Override
public void startDocument() throws SAXException {}
@Override
public void startPrefixMapping(final String prefix, final String uri)
throws SAXException {}
}
特定の言語がある:私はそれはあなたが本当に次の例では、あなたの構造のXMLファイルを読み込み、GroupBMsg-タグ内のすべてのテキストを出力し
が必要なものであるかどうかわからないんだけどもう使わない? –
ファイルの構造をチェックする必要がありますか、またはそれがséに有効であると想定することはできますか? – Thilo
私はJAXB/JAXB/Springバッチを使用しています。私は多くの記事を読んでいますが、上記のXMLを効果的に処理する方法についてはまだ分かりません。 – Weber