Разбор Scala XML с использованием реального HTML (с непревзойденным тегом)

0

Мое приложение пытается внедрить html-документ в XML-документ.

val xml = 
  <document>
    <id> { getId } </id>
    <content> 
      { getContent }
    </content>
  </document>

getId - простая функция для возврата нового порядкового номера. Проблема заключается в getContent:

def getContent = {
  val wrapped = "<wrap>"+article.content+"</wrap>"
  XML.loadString(wrapped).child
}

Как вы можете видеть, article.content возвращает строку, которая хранит документ HTML в реальном мире. Функция Scala.xml.XML.loadString будет анализировать ее в XML и правильно возвращать список дочерних элементов и встраиваться в xml val.

Однако это работает, когда действителен только html, например <body>Hello world</body>

В некоторых статьях может появиться: <body><strong>Hello world</body> котором отсутствует тег закрытия <strong> elem. (Да, я не могу просто обвинить пользователя!)

В этом случае он выдает исключение при этом разборе и останавливает приложение.

Можно ли каким-либо образом обойти проверку или просто вставить HTML как строку в XML-документ без разбора?

Прошу пролить свет на эту ситуацию. Любые предложения приветствуются.

  • 1
    Вы должны использовать анализатор html , а не анализатор xml . Я предпочитаю Tag Soup . Вы можете разобрать строку html в scala xml следующим образом: new scala.xml.parsing.NoBindingFactoryAdapter().loadXML(source, new org.ccil.cowan.tagsoup.jaxp.SAXFactoryImpl().newSAXParser())
Теги:

1 ответ

2

И JSoup, и TagSoup (среди других) подходят для передачи HTML, который также не является хорошо отформатированным XML.

Вам нужно будет решить, что лучше всего подходит для вашего собственного использования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню