我认为我缺少有关如何使用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中读取,解析和检索值的任何想法吗?
有什么想法吗?