Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / SAX-парсинг. Элементы со значением новая строка - 13 / 5 сообщений из 5, страница 1 из 1
11.10.2006, 18:24:43
    #34048479
alex-ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAX-парсинг. Элементы со значением новая строка - 13
Всем привет!

Есть программа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
 import  javax.xml.parsers.SAXParser;
 import  javax.xml.parsers.SAXParserFactory;

 import  org.xml.sax.Attributes;
 import  org.xml.sax.SAXException;
 import  org.xml.sax.helpers.DefaultHandler;

 public   class  xml {

   public   static   void  main(String args[]) {

     if  (args.length !=  1 ) {
      System.err.println("Usage: java NameLister xmlfile.xml");
      System.exit(- 1 );
    }

     try  {

      SAXParserFactory factory = SAXParserFactory.newInstance();
      SAXParser saxParser = factory.newSAXParser();

      DefaultHandler handler =  new  DefaultHandler() {

         public   void  startDocument()  throws  SAXException
        {
            System.out.println("----------------------- Start of the document ----------------------------");
        }

         public   void  startElement(String uri, String localName, String qName, Attributes attrs)  throws  SAXException
        {
            System.out.println("Element q-name: [" + qName + "] started.");

             int  attrCnt = attrs.getLength();
             for  ( int  i= 0 ; i < attrCnt; i++)
            {
                System.out.println( "Attribute [" + attrs.getLocalName(i) + "] "
                                  + "Type [" + attrs.getType(i) + "]"
                                  + "Value [" + attrs.getValue(i) + "]"
                                   );
            }
        }

         public   void  characters( char [] chars,  int  start,  int  length)  throws  SAXException
        {
            String value =  new  String(chars);
            System.out.println("Element value: [" + value.substring(start, start + length) + "]");
        }

         public   void  endDocument()  throws  SAXException
        {
            System.out.println("----------------------- End of the document ----------------------------");
        }

         public   void  endElement(String uri, String localName, String qName)  throws  SAXException
        {
            System.out.println("Element q-name: [" + qName + "] stopped.");
        }
      };

      saxParser.parse(args[ 0 ], handler);

    }  catch  (Exception e) {
      e.printStackTrace();
    }
  }
}

Есть хml-файл, который надо распарсить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" ?>
<PHONEBOOK>
<PERSON>
<NAME>Green</NAME>
<EMAIL>green@yourserver.com<;/EMAIL>
<TELEPHONE> 9001 - 999 - 201 </TELEPHONE>
<WEB>www.java.com</WEB>
</PERSON>
</PHONEBOOK>

Прога работает - парсит, вроде все Ок:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
----------------------- Start of the document ----------------------------
Element q-name: [PHONEBOOK] started.
Element value: [
]
Element q-name: [PERSON] started.
Element value: [
]
Element q-name: [NAME] started.
Element value: [Green]
Element q-name: [NAME] stopped.
Element value: [
]
Element q-name: [EMAIL] started.
Element value: [green@yourserver.com]
Element q-name: [EMAIL] stopped.
Element value: [
]
Element q-name: [PERSON] stopped.
Element value: [
]
Element q-name: [PHONEBOOK] stopped.
----------------------- End of the document ----------------------------

Но, нормально-ли то, что на определенных итерациях возвращается в качестве значения элемента идет символ новой строки (13)... ?
Ну я понимаю для элементов <PHONEBOOK> и <PERSON> (при их встрече вызывается метод СтартЭлемент, далее Characters и пошло...), НО откуда береться значение после элемента <NAME> перед элемнтом <EMAIL> (см.ниже)?

Element q-name: [NAME] started.
Element value: [Green]
Element q-name: [NAME] stopped.
Element value: [
]

Element q-name: [EMAIL] started.

В принципе так мне при парсинге необходимо выдирать значения только для определенных элементов - может меня это и не коснется, но мне хотелось-бы понять причину подобной ситуации..

Заранее спасибо.
Ну и извините за столь громоздкий вопросец...
...
Рейтинг: 0 / 0
11.10.2006, 18:37:22
    #34048513
alex-ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAX-парсинг. Элементы со значением новая строка - 13
Сорри, маленькое уточнение:

Тот аутпут, который я приводил выше - результат обработки этого xml-файла (выкинуто 2 последних элемента)...
Код: plaintext
1.
2.
3.
4.
5.
6.
<?xml version="1.0" ?>
<PHONEBOOK>
<PERSON>
<NAME>Green</NAME>
<EMAIL>green@yourserver.com<;/EMAIL>
</PERSON>
</PHONEBOOK>

Хотя в принципе сути вопроса это не меняет...
...
Рейтинг: 0 / 0
11.10.2006, 18:45:32
    #34048529
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAX-парсинг. Элементы со значением новая строка - 13
Метод characters может получать управление несколько раз при прохождении одного элемента.

Писать нужно в виде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
   public   void  characters( char  ch[],  int  start,  int  length) {
     for  ( int  i = start; i < start + length; i++) {
       switch  (ch[i]) {
         case  '\\':
           break ;
         case  '"':
           break ;
         case  '\n':
           break ;
         case  '\r':
           break ;
         case  '\t':
           break ;
         default :
          last_value.append(ch[i]);
           break ;
      }
    }
  }
...
Рейтинг: 0 / 0
11.10.2006, 19:32:43
    #34048631
alex-ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAX-парсинг. Элементы со значением новая строка - 13
Хм...
Вспомогло! спасиб!

Кстати,
авторМетод characters может получать управление несколько раз при прохождении одного элемента а про такие фичи где-нить написано, яб с удовольствием почитал - или это все плод кропотливого дибаггерства?
...
Рейтинг: 0 / 0
11.10.2006, 20:41:00
    #34048731
он же
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAX-парсинг. Элементы со значением новая строка - 13
alex-ikarа про такие фичи где-нить написано [...]?
Конечно.

http://www.saxproject.org/quickstart.html
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / SAX-парсинг. Элементы со значением новая строка - 13 / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]