#java
Вопрос:
Когда я использую rome для анализа xml-ссылки:
package com.dolphin.soa.post;
import com.rometools.rome.feed.synd.SyndFeed;
import com.rometools.rome.io.ParsingFeedException;
import com.rometools.rome.io.SyndFeedInput;
import com.rometools.rome.io.XmlReader;
import lombok.extern.slf4j.Slf4j;
import java.net.ConnectException;
import java.net.URL;
/**
* @author dolphin
*/
@Slf4j
public class MiniExample {
public static void main(String[] args) {
try {
SyndFeed feed = new SyndFeedInput().build(new XmlReader(new URL("http://yechengfu.com/feed.xml")));
} catch (ConnectException connectException) {
log.error("rss parse error", connectException);
} catch (ParsingFeedException e){
log.error("rss parse error", e);
}catch (Exception e) {
log.error("rss parse error", e);
}
}
}
показывает ошибку Invalid XML: Error on line 6: The element type "hr" must be terminated by the matching end-tag "</hr>".
, я проверил ссылку xml и не нашел никакого нестандартного формата. почему это произошло и возможно ли это исправить? Это моя зависимость:
api "com.rometools:rome:1.15.0"
Комментарии:
1. Этот URL-адрес выдает 308 (перенаправление) на yechengfu.com/feed.xml (вместо HTTP). Перенаправление не выполняется, но оно пытается проанализировать HTML. Переключитесь на https, чтобы получить фактический канал.
2. Проанализированный файл не является допустимым XML, даже если об этом говорится в URL-адресе.
Ответ №1:
Файл, возвращаемый при вызове «http://yechengfu.com/feed.xml» представляет собой небольшой html-файл (с одним <hr>
тегом):
<html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>nginx/1.19.2</center>
</body>
</html>
Вы можете увидеть это, если выполните такую команду, как curl:
curl http://yechengfu.com/feed.xml
Страница перенаправляется в обычном браузере, но curl и XmlReader не будут автоматически следовать перенаправлениям. Если вы дадите curl аргумент «-L», он последует за вашим feed.xml
файлом.
Я предполагаю, что вам придется прочитать о том, как настроить nginx и использовать его в качестве обратного прокси-сервера вместо того, чтобы переписывать URL.