Добрый день!
Столкнулся с проблемой при sax-парсинге xml-файла.
В xml-файле
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<title>TUT.BY: АВТО - Дорога</title>
<link>https://auto.tut.by/</link>
<description>Новости автобизнеса, обзоры авто, тест-драйвы и актуальная информация для автовладельцев в Беларуси. Свежие новости о происшествиях в Беларуси.</description>
<language>ru</language>
<image>
<url>https://img.tyt.by/i/rss/auto/logo.gif</url>
<title>TUT.BY: АВТО - Дорога</title>
<link>https://auto.tut.by/</link>
</image>
<pubDate>Thu, 26 Nov 2020 12:10:00 +0300</pubDate>
<lastBuildDate>Wed, 25 Nov 2020 15:13:21 +0300</lastBuildDate>
<ttl>10</ttl>
<atom:link href="https://news.tut.by/rss/auto/road.rss" rel="self" type="application/rss+xml" />
<item>
<title>На свидетеля по делу избитого ОМОНом таксиста в Гродно также завели уголовное дело</title>
<link>https://auto.tut.by/news/road/709155.html?utm_campaign=news-feed&utm_medium=rss&utm_source=rss-auto</link>
<description><img src="https://img.tyt.by/thumbnails/n/regiony/0a/2/aleksey_sud_taksist_1_1_.jpg" width="72" height="54" alt="Фото: TUT.BY" border="0" align="left" hspace="5" />В Гродно продолжаются судебные заседания по уголовному делу в отношении местного таксиста Алексея Лапы, которого обвиняют по ст. 364 УК (Насилие либо угроза насилия в отношении сотрудника ОВД). Пострадавшие - два сотрудника ОМОНа - Артем Логиш и Дмитрий Конон. Также выяснилось, что на друга таксиста - Игоря Лозовика, который находился в машине вместе с Алексеем, также завели уголовное дело по данной статье. Однако первый допрос по данному делу прошел только 13 ноября.<br clear="all" /></description>
<atom:author>
<atom:name>TUT.BY</atom:name>
<atom:uri>https://news.tut.by/author/490~613.html</atom:uri>
</atom:author>
<category domain="https://auto.tut.by/rubric/road/">Дорога</category>
<enclosure url="https://img.tyt.by/n/regiony/0a/2/aleksey_sud_taksist_1_1_.jpg" type="image/jpeg" length="160924" />
<guid isPermaLink="true">https://auto.tut.by/news/road/709155.html?utm_campaign=news-feed&utm_medium=rss&utm_source=rss-auto</guid>
<pubDate>Wed, 25 Nov 2020 14:55:00 +0300</pubDate>
<media:content url="https://img.tyt.by/n/regiony/0a/2/aleksey_sud_taksist_1_1_.jpg" type="image/jpeg" medium="image" height="1200" width="1600" fileSize="160924" />
<media:content url="https://img.tyt.by/n/regiony/00/e/aleksey_sud_taksist_1.jpg" type="image/jpeg" medium="image" height="1200" width="1600" fileSize="204169" />
<media:content url="https://img.tyt.by/n/regiony/05/5/1598332632.jpg" type="image/jpeg" medium="image" height="869" width="1269" fileSize="234900" />
</item>
<item>...</item>
...
У меня не получается вывести всю информацию из тега link, выводит обрезано. Также и с тегом description.
И еще, как достать информацию только из тегов item?
Мой код:
public class SaxParser {
public static Channel channelObj;
public static Channel parse() throws ParserConfigurationException, SAXException, IOException {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLHandler handler = new XMLHandler();
parser.parse("resources/tutby.xml", handler);
return channelObj;
}
private static class XMLHandler extends DefaultHandler {
private static final ArrayList<Item> items_t = new ArrayList<>();
private String lastElementName;
private String title_t;
private String link_t;
private String description_t;
private Channel channel_t;
boolean title_b = false;
boolean link_b = false;
boolean description_b = false;
@Override
public void endDocument() {
channelObj = channel_t;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) {
if (qName.equalsIgnoreCase("title")) {
title_b = true;
}
if (qName.equalsIgnoreCase("link")) {
link_b = true;
}
if (qName.equalsIgnoreCase("description")) {
description_b = true;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String information = new String(ch, start, length);
information = information.replace("\n", "").trim();
if (!information.isEmpty()) {
if (title_b) {
title_t = information;
System.out.println("\nTitle: " + title_t);
title_b = false;
}
if (link_b) {
link_t = information;
System.out.println("\nLink: " + link_t);
link_b = false;
}
if (description_b) {
description_t = information;
System.out.println("\nDescription: " + description_t);
description_b = false;
}
}
}
@Override
public void endElement(String uri, String localName, String qName) {
if (qName.equals("item")) {
if ((title_t != null && title_t.length() != 0)
&& (description_t != null && description_t.length() != 0)
&& (link_t != null && link_t.length() != 0)) {
items_t.add(new Item(description_t, title_t, link_t));
}
title_t = null;
description_t = null;
link_t = null;
if (qName.equals("channel")) {
channel_t = new Channel(items_t);
}
}
}
}
}