2014年11月12日 星期三

利用 XSLT 擷取 XML 的書目欄位

最近因為需要整理書目資料,所以需要從Zotero 中擷取需要的資訊。自己可以選擇土法煉鋼,從每筆書目中複製自己需要的資訊。不過,此機械化的動作其實也可以利用程式來處理。為此,自己就花了幾個小時來研究如何處理進行。

要直接從 zotero.sqlite 的資料庫擷取是自己能力範圍之外,因為自己尚未熟悉此資料庫的做法。不過,難得自己最近的腦袋似乎比較有餘暇思考,所以可以思考讓大部分的工作用程式處理,而一部分的工作還是必須借助人力來進行。因此,就先把書目格式弄成XML,然後再用XSLT 來轉換。



首先,先在zotero中把書目匯出成 html檔案。方法是在 Zotero 中選擇自己要處理的書目,然後用『Generate Report from Items』,把書目弄成網頁模式:



 其呈現的頁面如下:


之後,選擇檢視程式原始碼(ctrl+u)即可以看到由書目轉成的 html 檔案。

在慢慢解析相關的語法後,找到了每個欄位的 xpath,進而可以把它們轉成自己需要的文字檔案。程式的語法如下:




xsl:for-each select="html/body/ul/li"  #包著
    xsl:value-of select="table/tr/th[text()='ISBN']/following-sibling::td"  #取得 ISBN
    xsl:value-of select="h2"/  #取得 標題
    xsl:value-of select="table/tr/th[text()='Edition']/following-sibling::td" #取得 版本
    xsl:value-of select="table/tr/th[@class]/following-sibling::td"    #取得 作者
    xsl:value-of select="table/tr/th[text()='Publisher']/following-sibling::td"#取得 出版社
    xsl:value-of select="table/tr/th[text()='Date']/following-sibling::td" #取得 出版日期


由於blogspot 貼程式碼會把『<』、『> 』拿掉,再繼續讓我目前寫的程式碼干擾原本的html 程式碼,所以僅能這樣寫出來。

沒有留言:

張貼留言