Not : XML ve DOM başlıklı yazıya göz atabilirsiniz.
Giriş
SAX Parser'lar sadece ileri doğru (forward-only) ilerlerler. Parser bir tag ile karşılaştıkça handler nesnesini çağırır. DOM Parser'lara göre SAX Parser'lar daha az bellek harcadıkları için büyük XML'leri okumak için kullanılabilirler.
Java
SAX Parser resimdeki sınıfları kullanır.
SaxParser sınıfı
SaxParser büyük XML dosyalarını okumak için DOM'a göre daha avantajlı. Nasıl DocumentBuilderFactory bir DocumentBuilder yaratıyorsa SaxParserFactory'de bir SAXParser yaratıyor.
DefaultHandler sınıfı
SaxParser sınıfının okuduğu her tag DefaultHandler sınıftan türeyen bir başka sınıfa gönderiliyor.
characters
Bu metod ile tag içindeki veriye karakter karakter erişme imkanı var.
<lastname>deneme</lastname> içindeki deneme metni
Örnek'te ise metin karakter karakter aranıyor
C#
C#'ta kullanılan önemli sınıflar XMLReader ve XMLWriter
XmlReader sınıfı
Bu sınıf klasik bir SAX Parser değildir! Ancak SAX Parser'a çok benzediği için bu yazıya dahil ediyorum. Sınıf ileri doğru çalışır. SAX Parser'dan farklı olarak tag'ler ile karşılaştıkça bir handler'ı çağırmak yerine, programcının kendisini çağırmasını bekler.
MoveToContent metodu
Reader'ın önündeki XMLDeclaration, Comment gibi şeyleri atlamasını sağlar. Read metodunu çağırarak atlamaktan daha hızlıdır.
Örnek:
Giriş
SAX Parser'lar sadece ileri doğru (forward-only) ilerlerler. Parser bir tag ile karşılaştıkça handler nesnesini çağırır. DOM Parser'lara göre SAX Parser'lar daha az bellek harcadıkları için büyük XML'leri okumak için kullanılabilirler.
Java
SAX Parser resimdeki sınıfları kullanır.
SaxParser sınıfı
SaxParser büyük XML dosyalarını okumak için DOM'a göre daha avantajlı. Nasıl DocumentBuilderFactory bir DocumentBuilder yaratıyorsa SaxParserFactory'de bir SAXParser yaratıyor.
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
DefaultHandler handler = new MyHandler();
parser.parse("file.xml", handler);
MyHandler sınıfı DefaultHandler'dan kalıtan bir sınıfclass MyHandler extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
}
@Override
public void endDocument() throws SAXException {
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
}
// To take specific actions for each chunk of character data (such as
// adding the data to a node or buffer, or printing it to a file).
@Override
public void characters(char ch[], int start, int length)
throws SAXException {
}
}
DefaultHandler sınıfı
SaxParser sınıfının okuduğu her tag DefaultHandler sınıftan türeyen bir başka sınıfa gönderiliyor.
characters
Bu metod ile tag içindeki veriye karakter karakter erişme imkanı var.
<lastname>deneme</lastname> içindeki deneme metni
new String (ch,start,start+length) şeklinde alınabilir.
Örnek'te ise metin karakter karakter aranıyor
C#
C#'ta kullanılan önemli sınıflar XMLReader ve XMLWriter
XmlReader sınıfı
Bu sınıf klasik bir SAX Parser değildir! Ancak SAX Parser'a çok benzediği için bu yazıya dahil ediyorum. Sınıf ileri doğru çalışır. SAX Parser'dan farklı olarak tag'ler ile karşılaştıkça bir handler'ı çağırmak yerine, programcının kendisini çağırmasını bekler.
MoveToContent metodu
Reader'ın önündeki XMLDeclaration, Comment gibi şeyleri atlamasını sağlar. Read metodunu çağırarak atlamaktan daha hızlıdır.
Örnek:
using (XmlReader reader = XmlReader.Create(new StringReader(myXmlAsString)))
{
reader.MoveToContent(); // get the root-element
}
Read Metodu
Örnek:
Örnek:
static IEnumerable<XElement> SimpleStreamAxis(string inputUrl,
string elementName)
{
using (XmlReader reader = XmlReader.Create(inputUrl))
{
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name == elementName)
{
XElement el = XNode.ReadFrom(reader) as XElement;
if (el != null)
{
yield return el;
}
}
}
}
}
}
Hiç yorum yok:
Yorum Gönder