2015-08-03 81 views
0

我对XSLT非常陌生 - 在过去的几天里给了我自己一个崩溃的过程,所以我的问题很可能是一个noob之一 - 如果是的话,表示歉意。在PHP中使用MS XSLT功能

背景 - 我有一个PHP页面,使AJAX调用外部Web服务。 Web服务返回使用XSLT转换的XML。从表面上看,我的问题很简单 - 我想在响应中重新设置日期格式,使其成为英国用户友好的用户。

我的PHP页面托管在IIS上,所以我认为我应该能够使用MS XSLT函数ms:format-date()。

顶部我的样式标签如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:dt="urn:schemas-microsoft-com:datatypes"> 

和变换从而完成:

<xsl:value-of select="ms:format-date(date, 'dd/MM/yyyy')"/> 

凡在上面的“日期”的格式为YYYY-字符串MM-DDTHH:MM:SS,但输出反而在日期字段中显示为'假'。

所有我希望能够做的是重新格式化日期为“DD/MM/YYYY HH:MM:SS”

所以,我的问题是 - 1,我可以使用MS XSLT的功能在这是在一个基于PHP的应用程序,2,如果不是,这又能如何轻松实现?

回答

0

我可以使用MS XSLT的功能在这是在一个基于PHP应用程序

大概不会,但你可以使用:

<xsl:value-of select="function-available('ms:format-date')"/> 

找出肯定的。

如果不是,那么这个问题又能如何轻松实现?

XSLT 1.0中没有format-date()函数。尝试使用命名模板代替:

<xsl:template name="reformat-dateTime"> 
    <xsl:param name="dateTime"/> 
    <xsl:variable name="y" select="substring($dateTime, 1, 4)"/> 
    <xsl:variable name="m" select="substring($dateTime, 6, 2)"/> 
    <xsl:variable name="d" select="substring($dateTime, 9, 2)"/> 
    <xsl:variable name="time" select="substring($dateTime, 12, 8)"/> 
    <xsl:value-of select="concat($d, '/', $m, '/', $y, ' ', $time)"/> 
</xsl:template> 
+0

更好。这工作完美。为了完成解决方案,我用'替换了以下行:'' name =“reformat-dateTime”>',并添加到@michael的模板片段中,结束标签。 –

0

如果你想使用微软特定的扩展功能,那么你就需要使用微软的XSLT处理器MSXML在PHP在Windows上做这样的事情

$doc = new COM('Msxml2.DOMDocument.6.0'); 
doc->async = FALSE; 
doc->load('input.xml'); 
$sheet = new COM('Msxml2.DOMDocument.6.0'); 
$sheet->async = FALSE; $sheet->load('sheet.xsl'); 
echo $doc->transformNode($sheet); 

如果您使用PHP的XSLT处理器,那么你可以调用PHP利用PHP函数来格式化日期。

+0

谢谢马丁。经过多一点研究,我最终找到了PHP XSLTProcessor类[here](http://php.net/manual/en/xsltprocessor.registerphpfunctions.php)。我应该在我的帖子中进一步澄清,但实际的ajax调用是使用jquery进行的。他们使用PHP脚本格式化Web服务请求并输出原始XML,然后Jquery将这个转换应用到客户端中,所以上面的示例在没有实质性返工的情况下并不适合。但是,您使用XSLTProcessor的第二个建议更有前途。我现在正在修改我的XSLT,如上面的链接 –

+1

PHP XSLTProcessor也支持EXSLT。这包括[EXSLT日期函数](http://exslt.org/date/index.html)。 – ThW