.
Bu, XML dosyalarını ayrıştırmaya yönelik daha olay odaklı bir yoldur ve ayrıştırma sırasında hedef dosyaya doğrudan yazmak istediğinizde iyi bir yaklaşım olabilir. SAX Ayrıştırıcı, tüm xml içeriğini belleğe okumaz, ancak giriş akışındaki öğeleri kodladığında yöntemleri tetikler. Deneyimlediğim kadarıyla, bu bellek açısından verimli bir işlem şeklidir.
SAX'iniz, Stax-Solution'ınıza kıyasla, verileri uygulamanıza aktarır - bu, durumu korumanız gerektiği anlamına gelir (hangi etikette olduğu gibi). yer.
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 {}
}
belirli dil' vardır: o gerçekten
Aşağıdaki örnek yapıda bir xml dosyasında okur ve GroupBMsg-Etiketler içindeki tüm metni yazdırır gerektiren bir şey olup olmadığından emin değilim Kullanacak mısın? –
Dosyanın yapısı kontrol edilmeli mi, yoksa sé için geçerli olduğunu mu düşünüyorsunuz? – Thilo
Java kullanıyorum, JAXB/Spring Batch tercih edilen bir seçenektir, çok sayıda yazı okudum ama yine de xml'nin üzerinde nasıl etkili bir şekilde işlem yapılacağı hakkında hiçbir fikrim yok. – Weber