Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Пустой тег в SAX parser / 10 сообщений из 10, страница 1 из 1
24.01.2013, 19:49:39
    #38123796
denis11111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой тег в SAX parser
Добрый день
Есть SAX parser, который разбирает XML-документ.
В нем попадаються пустые теги виду: <tag /> . И если считать дание с этого тега, то там будет цыфра 1.

Такой пустой тег работает нормально: <tag></tag>

Как это пофиксить?
...
Рейтинг: 0 / 0
24.01.2013, 20:46:35
    #38123836
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой тег в SAX parser
Сказки какие-то. Покажите test case и xml.
...
Рейтинг: 0 / 0
25.01.2013, 12:53:52
    #38124486
denis11111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой тег в SAX parser
Вот, самой простой пример:
Код: java
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.
  public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {

        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser saxParser = factory.newSAXParser();
        DefaultHandler handler = new DefaultHandler() {
            boolean bfname = false;

            public void startElement(String uri, String localName, String qName,
                    Attributes attributes) throws SAXException {
                if (qName.equalsIgnoreCase("firstname")) {
                    bfname = true;
                }
            }

            public void endElement(String uri, String localName,
                    String qName) throws SAXException {
            }

            public void characters(char ch[], int start, int length) throws SAXException {
                if (bfname) {
                    String s = new String(ch, start, length);
                    System.out.println("First Name : " + s);
                    bfname = false;
                }
            }
        };

        saxParser.parse("c:\\file.xml", handler);



Достает значение з <firstname>

XML:
Код: xml
1.
2.
3.
4.
<?xml version="1.0" encoding="UTF-8"?>
<company>
	<firstname /><lastname>lol</lastname>
</company>



как видно есть <firstname />, за ним сразу <lastname>lol</lastname>
В результате на виходе будет:
First Name : lol

Тобто значение из <lastname>, а не из <firstname>
...
Рейтинг: 0 / 0
25.01.2013, 13:04:16
    #38124515
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой тег в SAX parser
А сбрасывать флаг Пушкин будет?
Код: java
1.
bfname = qName.equalsIgnoreCase("firstname");
...
Рейтинг: 0 / 0
25.01.2013, 13:07:07
    #38124525
MOHAX777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой тег в SAX parser
Потому как должно быть:

public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("firstname")) {
bfname = true;
} else
bfname = false;

}
...
Рейтинг: 0 / 0
25.01.2013, 13:09:03
    #38124533
MOHAX777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой тег в SAX parser
denis11111,


хотя, конечно, лучше так:
Код: javascript
1.
2.
3.
4.
              public void startElement(String uri, String localName, String qName,
                      Attributes attributes) throws SAXException {
                  bfname = qName.equalsIgnoreCase("firstname");
              }
...
Рейтинг: 0 / 0
25.01.2013, 13:13:56
    #38124544
denis11111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой тег в SAX parser
Blazkowicz,

Я так понял в public void endElement?

Я думал что сбросил его в public void characters ...
...
Рейтинг: 0 / 0
25.01.2013, 13:20:18
    #38124555
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой тег в SAX parser
denis11111Я так понял в public void endElement?
Я думал что сбросил его в public void characters ...
мля...
Да, нет у него ни endElement, ни characters.
...
Рейтинг: 0 / 0
25.01.2013, 13:23:08
    #38124571
denis11111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой тег в SAX parser
Blazkowicz,

Так вот, считал данные и сбросил:

Код: java
1.
2.
3.
String s = new String(ch, start, length);
                    System.out.println("First Name : " + s);
                    bfname = false;  // <--
...
Рейтинг: 0 / 0
25.01.2013, 13:46:42
    #38124632
denis11111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой тег в SAX parser
Вобще я понял.
Если тег пустой, то метод "characters" никогда не виполнится и мой флаг не сбросится, вот отсюда и идут проблемі.

Спасибо Монаху и Бласковичу)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Пустой тег в SAX parser / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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