Мое приложение пытается внедрить 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-документ без разбора?
Прошу пролить свет на эту ситуацию. Любые предложения приветствуются.
И JSoup, и TagSoup (среди других) подходят для передачи HTML, который также не является хорошо отформатированным XML.
Вам нужно будет решить, что лучше всего подходит для вашего собственного использования.
html
, а не анализаторxml
. Я предпочитаю Tag Soup . Вы можете разобрать строку html вscala
xml
следующим образом:new scala.xml.parsing.NoBindingFactoryAdapter().loadXML(source, new org.ccil.cowan.tagsoup.jaxp.SAXFactoryImpl().newSAXParser())