Разбор XML-файла с помощью SAXParser - PullRequest
0 голосов
/ 30 июня 2011

Я новичок в этом, так почему же, когда я хочу напечатать значение для элемента NAME в StartElement (), для всех 3 элементов он печатает ноль?

class Test {
  public static void main(String args[]) {
    try {
      SAXParserFactory factory = SAXParserFactory.newInstance();
      SAXParser saxParser = factory.newSAXParser();
      DefaultHandler handler = new DefaultHandler() {


        public void startElement(String uri, String localName, String qName, Attributes attributes)
            throws SAXException {
          if (qName.equals("NAME")) {
          String str = attributes.getValue("NAME");
           System.out.println(str);

          }
        }  
      };

      saxParser.parse(new InputSource(new StringReader(xmlString)), handler);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  static String xmlString = "<PHONEBOOK>" +
      "  <PERSON>" +
      "   <NAME>Joe Wang</NAME>" +
      "   <EMAIL>joe@yourserver.com</EMAIL>" +
      "   <TELEPHONE>202-999-9999</TELEPHONE>" +
      "   <WEB>www.java2s.com</WEB>" +
      "  </PERSON>" +
      "  <PERSON>   " +
      "<NAME>Karol</NAME>" +
      "   <EMAIL>karol@yourserver.com</EMAIL>" +
      "   <TELEPHONE>306-999-9999</TELEPHONE>" +
      "   <WEB>www.java2s.com</WEB>" +
      "  </PERSON>" +
      "  <PERSON>" +
      "   <NAME>Green</NAME>" +
      "   <EMAIL>green@yourserver.com</EMAIL>" +
      "   <TELEPHONE>202-414-9999</TELEPHONE>" +
      "   <WEB>www.java2s.com</WEB>" +
      "  </PERSON>" +
      "  </PHONEBOOK>";
}

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Это потому, что вы пытаетесь прочитать атрибут из элемента <NAME> (который не имеет никакого атрибута).

String str = attributes.getValue("NAME");

Чтобы прочитать содержимое элемента <NAME>, выпридется переопределить characters (char ch[], int start, int length) метод DefaultHandler и отобразить все возвращенные ch[] (массив символов).

1 голос
/ 30 июня 2011

Ваш XML не имеет атрибутов .Итак, это:

String str = attributes.getValue("NAME");
System.out.println(str);

... никогда ничего не печатать.

Вы хотите распечатать содержимое элемента NAME, по внешнему видуэтогоТаким образом, вы захотите обработать событие characters, когда вы в элемент NAME.

Кстати, у вас есть для использования SAX?По моему опыту, это боль в шее по сравнению с использованием DOM-подобной модели (например, с использованием JDOM или другого API - встроенный достаточно болезненный).


Альтернативный подход, если вы контролируете XML, заключается в запуске с использованием атрибутов:

<PERSON NAME="Joe Wang"
        EMAIL="joe@yourserver.com"
        TELEPHONE="202-999-9999"
        WEB="www.java2s.com" />

Тогда вы можете использовать attributes.getValue("NAME"), когда получитеPERSON элемент.

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