gpt4 book ai didi

XSLT函数和 namespace

转载 作者:行者123 更新时间:2023-12-03 15:30:43 27 4
gpt4 key购买 nike

我是XSLT的新手,并且已经完成了基本的转换。接下来,我想尝试日期操作,因为我的数据将带有时间戳。但是,我似乎无法使任何日期函数正常工作,这使我感到非常沮丧。我正在使用Firefox 3.5,xsltproc 1.1.24,xalan 1.10和XMLSpy 2009进行测试,他们都说我要使用的功能不存在。

我的xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="datetime.xsl"?>

<watcher>
<event id="1" date="2009-09-04T13:49:10-0500" type="ABCD">This is a test </event>
</watcher>
</code>

我的xsl看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xsl:template match="event[@type='ABCD']">
<!-- Date: <xsl:value-of select="day-from-dateTime(xs:dateTime(@date))"/> -->
<!-- Date: <xsl:value-of select="day-from-dateTime(@date)"/> -->
Date: <xsl:value-of select="fn:day-from-dateTime(@date)"/>
</xsl:template>

</xsl:stylesheet>

如果我制作样式表版本2,XMLSpy提示说它不能转换日期: XSLT 2.0 Debugging Error: Error in XPath 2.0 expression (Cast failed, invalid lexical value - xs:dateTime '2009-09-04T13:49:10-0500')
如果我将其保留为版本1,它将提示另一个错误: XSLT 1.0 Debugging Error: Error in XPath expression (Unknown function - Name and number of arguments do not match any function signature in the static context - 'day-from-dateTime')
每当我尝试将XSL更改为使用 namespace (例如fn:day-from-dateTime)时,它都根本无法工作,我的所有解析器都说 The function number 'http://www.w3.org/2005/02/xpath-functions:day-from-dateTime' is not available及其变体。从其他测试中,我知道我可以完美地使用substring()函数,而不需要任何 namespace 前缀,并且我相信它与day-from-dateTime位于同一 namespace 中。

我觉得这非常容易,因为所有教程都显示了正在使用的功能,但似乎有些东西使我难以理解。有人可以告诉我我所缺少的吗?

最佳答案

哎呀,这里有讨厌的版本。您看到的许多问题将是因为您使用的XSLT处理器不支持XPath 2.0,而那是day-from-dateTime函数的来源。

我可以使用Saxon processor-Saxon-B 9.1.0.6作为我的处理器而不是Xalan来获得您要尝试执行的工作。 (根据documentation,Xalan似乎仅支持XPath 1.0)

您的文档中有一些错误:

源文档的时区应为05:00,而不是0500

<?xml version="1.0" encoding="UTF-8"?>
<watcher>
<event id="1" date="2009-09-04T13:49:10-05:00" type="ABCD">This is a test </event>
</watcher>

XSLT应该将字符串2009-09-04T13:49:10-05:00转换为xs:dateTime,这是day-from-dateTime参数的类型。
Date: <xsl:value-of select="day-from-dateTime(xs:dateTime(@date))"/>

然后就可以了
<?xml version="1.0" encoding="UTF-8"?>



Date: 4

希望能有所帮助,

关于XSLT函数和 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1383717/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com