Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用XPath/XSLT解析iCalendar数据_Xml_Xslt_Parsing_Xpath_Icalendar - Fatal编程技术网

Xml 使用XPath/XSLT解析iCalendar数据

Xml 使用XPath/XSLT解析iCalendar数据,xml,xslt,parsing,xpath,icalendar,Xml,Xslt,Parsing,Xpath,Icalendar,我正在使用XML驱动的CMS,在我编写或实现解析iCal格式的模块之前,我想知道是否有任何方法可以仅使用XSLT或理想情况下仅使用XPath表达式解析它,因为这是CMS的内置函数。好吧,您最初的问题是它不是XML格式。iCalendar文件被标记为文本: BEGIN:VCALENDAR VERSION:2.0 PRODID:-//hacksw/handcal//NONSGML v1.0//EN BEGIN:VEVENT DTSTART:19970714T170000Z DTEND:1997071

我正在使用XML驱动的CMS,在我编写或实现解析iCal格式的模块之前,我想知道是否有任何方法可以仅使用XSLT或理想情况下仅使用XPath表达式解析它,因为这是CMS的内置函数。

好吧,您最初的问题是它不是XML格式。iCalendar文件被标记为文本:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY;LANGUAGE="en_US":Bastille Day Party
END:VEVENT
END:VCALENDAR
因此,用XPath和XSLT解析它可能是一项挑战。但是,iCalendar有一个XML表示。您可以在规范中找到有关的信息。上面的示例(来自该规范)如下所示:

<?xml version="1.0" TODO_NAMESPACE="foo"?>
<iCalendar xmlns:xCal="urn:ietf:params:xml:ns:xcal">
    <vcalendar>
        <version>2.0</version>
        <prodid>-//hacksw/handcal//NONSGML v1.0//EN</prodid>
        <vevent>
            <dtstart>19970714T170000Z</dtstart>
            <dtendt>19970715T035959Z</dtend>
            <summary xml:lang="en_US">Bastille Day Party</summary>
        </vevent>
    </vcaledar>
</iCalendar

2
-//hacksw/handcal//NONSGML v1.0//EN
19970714T170000Z
19970715T035959Z
巴士底狱日派对

感谢您的回复,恐怕我只能使用正常的iCal实现。我做了更多的挖掘,发现了这个例子,作者似乎正在将iCal转换为XML,但我不太确定如何实现它,因为XSL没有根XML元素interesting@Graham-那看起来是个不错的开始。执行样式表时,在
icaldataraw
参数中传入iCal的字符串值。您可以对任何XML文件运行XSLT,甚至XSLT本身。模板处理的是
icaldataraw
参数,与源XML文档没有任何关系。@Mads-感谢您的解释,因为我有更多的时间来查看它。不幸的是,我使用的CMS的一个限制要求数据源必须是有效的XML,然后才能对其应用XSLT。您可以在检查格式是否良好之前应用XPath表达式,我想我可以使用XPath在iCal文本周围包装一些标记,然后应用XSLT,但我是XPath新手,我不确定我是否能够做到这一点。您需要使用其他方法生成XML文档,在iCal文本周围放置包装元素(例如php,提供动态XML的jsp页面)。XPATH用于处理XML节点,而不是解析/转换。您是否无法获取iCal文本并将其设置为XSLT参数值?如果是,则只需将XSLT用作源XML文件来转换自身。