如何使用Kotlin解析站点地图?

时间:2019-01-13 07:56:44

标签: kotlin

我认为我缺少有关如何使用Kotlin解析XML的基本知识。我似乎做得不好,这应该是一个简单的练习。

站点地图数据示例:

<?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中读取,解析和检索值的任何想法吗?

有什么想法吗?

0 个答案:

没有答案