【发布时间】:2015-10-08 17:49:26
【问题描述】:
我有一个 XML 文件,其中包含我想提供给 google-calendar 的研讨会。 XML 文件由其他人维护并定期更新,因此我想以 google 自动抓取这些更改的方式进行此操作。
我对这种事情没有太多经验,所以我希望有人能指出我正确的方向。
这是我要处理的 XML 示例。
(XML 文件:“seminars.xml”)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="ical.xsl"?>
<seminars>
<lastupdate>20150707</lastupdate>
<seminar>
<speaker>A. Einstein</speaker>
<location>Zurich</location>
<date>20150607</date>
<time>15:45:00</time>
<university>Princeton</university>
<abstract>
<title>On the structure of generalized patent office spaces</title>
<content>To be announced.</content>
</abstract>
</seminar>
</seminars>
我想说,实现这一点的最明显方法是使用 XSLT 样式表来处理 XML 并构建一些 google-calendar 可以读取的文件。我有一个网站/服务器,我可以在其中放置这个 XSL 文件,所以理想情况下,我希望能够只上传一个正确的文件。
我拥有的 XSL 表如下所示。
(XSL 文件:“ical.xsl”)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1" media-type="text/calendar"/>
<xsl:variable name="crlf"> </xsl:variable>
<xsl:template match="/">BEGIN:VCALENDAR<xsl:value-of select="$crlf"/>
CALSCALE:GREGORIAN<xsl:value-of select="$crlf"/>
VERSION:2.0<xsl:value-of select="$crlf"/>
SEQUENCE:1<xsl:value-of select="$crlf"/>
X-WR-TIMEZONE:Europe/Paris<xsl:for-each select="seminars/seminar"><xsl:value-of select="$crlf"/>
BEGIN:VEVENT<xsl:value-of select="$crlf"/>
LOCATION:<xsl:value-of select="location"/><xsl:value-of select="$crlf"/>
DTSTART:<xsl:value-of select="date"/>T154500<xsl:value-of select="$crlf"/>
DTEND:<xsl:value-of select="date"/>T164500<xsl:value-of select="$crlf"/>
DESCRIPTION:seminar by <xsl:value-of select="speaker"/><xsl:value-of select="$crlf"/>
SUMMARY:<xsl:value-of select="abstract/title"/><xsl:value-of select="$crlf"/>
END:VEVENT<xsl:value-of select="$crlf"/></xsl:for-each>
END:VCALENDAR<xsl:value-of select="$crlf"/>
</xsl:template>
</xsl:stylesheet>
如果我处理 XML 文件,将其通过管道传输到 iCal 文件 (xsltproc seminars.xml > mycal.ics),然后将其导入到 google-calendar 中的某个日历,则此方法有效。
生成的mycal.ics 看起来像这样
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
VERSION:2.0
SEQUENCE:1
X-WR-TIMEZONE:Europe/Paris
BEGIN:VEVENT
LOCATION:Zurich
DTSTART:20150607T154500
DTEND:20150607T164500
DESCRIPTION:seminar by A. Einstein
SUMMARY:On the structure of generalized patent office spaces
END:VEVENT
现在,问题是 (1) google 不处理 XML,因此在导入时会产生错误;(2) 我不确定此方法是否会自动“获取更改”,因为它需要偶尔重新加载 XML .
那么,有没有办法让 google(或网络服务器)处理此文件,以便将其识别为 iCal 文件,并使其保持最新状态?
最后一个小问题是原始 XML 内部有不同的 XSL 文件。有没有一种简单的方法可以在我的网站上创建指向此文件的符号链接,或者包含不带标题的 XML,以便我可以用我的 XSL 替换原始 XSL?
【问题讨论】: