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

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

Как это пофиксить?
...
Рейтинг: 0 / 0
Пустой тег в SAX parser
    #38123836
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сказки какие-то. Покажите test case и xml.
...
Рейтинг: 0 / 0
Пустой тег в SAX parser
    #38124486
denis11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, самой простой пример:
Код: 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
Пустой тег в SAX parser
    #38124515
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сбрасывать флаг Пушкин будет?
Код: java
1.
bfname = qName.equalsIgnoreCase("firstname");
...
Рейтинг: 0 / 0
Пустой тег в SAX parser
    #38124525
MOHAX777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому как должно быть:

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

}
...
Рейтинг: 0 / 0
Пустой тег в SAX parser
    #38124533
MOHAX777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Пустой тег в SAX parser
    #38124544
denis11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

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

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

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

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

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


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