Может ли кто-нибудь помочь мне с этим JAVA SAXParser? - PullRequest
2 голосов
/ 12 февраля 2010

Я возился 3 часа и не могу заставить работать этот F ***** парсер. Извините за ругань. Я не понимаю, почему я не могу найти один приличный учебник , который делает именно то, что я хочу.

Я просто хочу отправить функцию в виде String / XML. Затем разбери это. это не так сложно. В Python я могу сделать это с закрытыми глазами. Отличная документация прямо здесь: http://www.crummy.com/software/BeautifulSoup/documentation.html

import BeautifulSoup
soup = BeautifulSoup(the_xml)
persons_name = soup.findAll('first_name')[0].string

Почему я не могу найти хорошую, простую документацию, которая учит меня, как анализировать XML ????? Это мой текущий код для JAVA SAX, и он не работает, и я даже не знаю почему.

  public static void parseit(String thexml)
    {
      SAXParserFactory factory = SAXParserFactory.newInstance();
      try {   
            SAXParser saxParser = factory.newSAXParser();
            saxParser.parse( thexml , new DefaultHandler() );
      } catch (Throwable err) {
            err.printStackTrace ();
      }
    }

Может кто-нибудь просто написать мне код для разбора XML с использованием SAX-парсера ... пожалуйста ... Это как 5 строк кода.

Ответы [ 5 ]

3 голосов
/ 12 февраля 2010

Хорошо, так что вам нужно реализовать собственный обработчик (вместо использования по умолчанию). Так что замени

saxParser.parse( thexml , new DefaultHandler() );

с

 saxParser.parse( thexml , new MyFreakingHandler() );

где MyFreakingHandler реализует интерфейс HandlerBase или может расширять класс DefaultHandler. Затем просто предоставьте реализацию для таких методов, как

public void startDocument () throws SAXException
public void endElement (String name) throws SAXException

Однако я не знаю, почему вы не смогли найти учебник в Интернете. Я не использую SAXParser уже 3 года, и чтобы ответить на ваш пост, я просто попросил Google о помощи.

EDIT:

Хорошо, так что прояснить ситуацию. Раньше было официальное руководство по Java для SAX, которое я сейчас не могу найти в Интернете, однако есть ряд достойных неофициальных руководств, которые могут быть весьма полезны. Попробуйте с этим, например: http://www.java -samples.com / showtutorial.php? Tutorialid = 152

3 голосов
/ 12 февраля 2010

Вы должны расширить свой обработчик по умолчанию DefaultHandler. Например, попробуйте это:

 saxParser.parse( new InputSource(new StringReader(thexml)) , new DefaultHandler()
                {
                public void     startElement(String uri, String localName, String qName, Attributes attributes)
                      {
                      System.out.println("Hello "+qName);
                      } 
                 });
2 голосов
/ 12 февраля 2010

Вы должны расширить DefaultHandler своей собственной реализацией. Парсер саксофона хорош, если вы работаете с большими документами. Если нет, то вам лучше использовать другой xml-анализатор, например dom4j.

Вот простой учебник по саксофону

0 голосов
/ 12 февраля 2010

Использование Java XPath API

XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
XPathExpression xPathExpression = xPath.compile("//first_name");
NodeList nodes = (NodeList) xPathExpression.evaluate(
    new InputSource(new FileInputStream(the_xml)), XPathConstants.NODESET);

Да, это излишне многословно.

0 голосов
/ 12 февраля 2010

Я не знаю, подходит ли вам этот вариант, но поскольку Groovy и Java хорошо играют вместе, почему бы не попробовать один из параметров Groovy для обработки XML.

В частности, посмотрите на XML Slurper (http://groovy.codehaus.org/Reading+XML+using+Groovy's+XmlSlurper)

def records = new XmlSlurper().parseText(thexml)
def persons_name = records.first_name[0]

На мой взгляд, это так же близко, как и к BeautifulSoup, совместимым с Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...