Pull parsery

  • části XML dokumentu čteme sekvenčně podle svých potřeb

  • přehlednější kód než v případě použití push-parserů (SAX)

  • implementace – XmlReader v .Net, StAX v Javě, …

// vytvoření parseru
XMLInputFactory f = XMLInputFactory.newInstance();
XMLStreamReader r = f.createXMLStreamReader("faktura.xml");

// zpracování celého dokumentu XML
while (r.hasNext())
{
  // přečtení dalšího prvku XML
  r.next();
  // zpracováváme jen elementy cena
  if (r.getEventType() == XMLStreamConstants.START_ELEMENT
      && r.getLocalName().equals("cena"))
  {
    // přečtení sazby DPH
    double sazbaDPH = Double.parseDouble(r.getAttributeValue(null, "dph")) / 100;
    // přečtení obsahu elementu cena
    double castka = Double.parseDouble(r.getElementText());
    // provedení výpočtu
    suma += castka;
    sumaDPH += castka * sazbaDPH;
  }
}

Obrázek 4. Princip pull-parseru

Princip pull-parseru