powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / SAX-парсинг. Элементы со значением новая строка - 13
5 сообщений из 5, страница 1 из 1
SAX-парсинг. Элементы со значением новая строка - 13
    #34048479
alex-ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Есть программа:
Код: 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
SAX-парсинг. Элементы со значением новая строка - 13
    #34048513
alex-ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, маленькое уточнение:

Тот аутпут, который я приводил выше - результат обработки этого 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
SAX-парсинг. Элементы со значением новая строка - 13
    #34048529
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод 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
SAX-парсинг. Элементы со значением новая строка - 13
    #34048631
alex-ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм...
Вспомогло! спасиб!

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

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


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