Недопустимый XML: Ошибка в строке 6: Тип элемента «hr» должен заканчиваться соответствующим конечным тегом «»

#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.