Как разобрать карту сайта с Kotlin? - PullRequest
0 голосов
/ 13 января 2019

Я думаю, что мне не хватает чего-то фундаментального в том, как анализировать XML с Kotlin. Я не могу понять это правильно, и это должно быть простое упражнение.

Пример данных Sitemap:

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="//www.vikingpest.com/main-sitemap.xsl"?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>https://www.site.fake/blog/</loc>
    </url>
    <url>
        <loc>https://www.site.fake/news/acquires-services/</loc>
        <lastmod>2018-12-22T19:40:45+00:00</lastmod>
    </url>
</urlset>

Я пытался создать простой класс данных для преобразования xml в:

data class SitemapData(
        @XmlElement(namespace = "http://www.sitemaps.org/schemas/sitemap/0.9") val uri : String,
        @XmlElement(name = "url") val url : String,
        @XmlElement(name = "loc") val loc : String
)

Я получаю ошибку пространства имен:

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.sitemaps.org/schemas/sitemap/0.9", local:"urlset"). Expected elements are (none)

Простая реализация парсера:

class Sitemap(resource: String) {
    private val sitemap = URL(resource).openConnection() as HttpURLConnection
    private val data : InputStream
    init {
        data = sitemap.inputStream
    }

    fun process() {
        val unmarshaller : Unmarshaller = JAXBContext.newInstance(SitemapData::class.java).createUnmarshaller()
        val xml = unmarshaller.unmarshal(data)
        print(xml.toString())
    }
}

Не получается установить аннотацию пакета для @XMLSchema, и я не могу найти документацию о том, как установить аннотацию для пакета. Любая идея о том, как использовать JAXB для чтения, анализа и извлечения значений из XML Sitemap?

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...