Skip to content

Instantly share code, notes, and snippets.

@stonezhl
Last active August 1, 2019 17:52
Show Gist options
  • Save stonezhl/5efd5fed7721a7a02389260bd2ed6a73 to your computer and use it in GitHub Desktop.
Save stonezhl/5efd5fed7721a7a02389260bd2ed6a73 to your computer and use it in GitHub Desktop.
OPFMetadata Struct
import Kanna
struct OPFMetadata {
// DCMES Required Elements
private(set) var identifiers = [String]()
private(set) var titles = [String]()
private(set) var languages = [String]()
// DCMES Optional Elements
private(set) var creators = [String]()
private(set) var date: String?
private(set) var publisher: String?
// Others like contributor, description, etc.
init?(package: XMLElement) {
let opfNamespace = ["opf": "http://www.idpf.org/2007/opf"]
guard let metadata = package.at_xpath("opf:metadata", namespaces: opfNamespace) else { return nil }
// DCMES
let dcNamespace = ["dc": "http://purl.org/dc/elements/1.1/"]
let dcmes = metadata.xpath("dc:*", namespaces: dcNamespace)
for dc in dcmes {
guard let text = dc.text else { continue }
switch dc.tagName {
case "identifier":
identifiers.append(text)
case "title":
titles.append(text)
case "language":
languages.append(text)
case "creator":
creators.append(text)
case "date":
date = text
case "publisher":
publisher = text
default:
break
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment