Programing

XSLT가 현재 날짜를 삽입 할 수 있습니까?

lottogame 2020. 9. 9. 20:09
반응형

XSLT가 현재 날짜를 삽입 할 수 있습니까?


내 사무실에서 사용하는 프로그램은 XSLT 파일과 함께 내보내는 XML 파일을 XHTML로 변환하여 보고서를 내 보냅니다. XSLT를 다시 작성하여 서식을 변경하고 소스 XML 파일에서 더 많은 정보를 추가합니다.

최종 보고서에 파일이 생성 된 날짜를 포함하고 싶습니다. 그러나 현재 날짜 / 시간은 원본 XML 파일에 포함되어 있지 않으며 XML 파일 생성 방법을 제어 할 수 없습니다. 현재 날짜를 반환하는 XSLT에 빌드되는 날짜 함수가없는 것 같습니다.

XSLT 변환 중에 현재 날짜를 포함 할 수있는 방법을 아는 사람이 있습니까?


XSLT 2

날짜 함수는 다음과 같이 기본적으로 사용할 수 있습니다.

<xsl:value-of  select="current-dateTime()"/>

이 또한 current-date()current-time().

XSLT 1

EXSLT 날짜 및 시간 확장 패키지를 사용하십시오.

  1. GitHub 에서 날짜 및 시간 패키지를 다운로드합니다 .
  2. date.xslXSL 파일 위치에 압축 풉니 다 .
  3. 스타일 시트 헤더를 설정합니다.
  4. 가져 오기 date.xsl.

예를 들면 :

<xsl:stylesheet version="1.0" 
    xmlns:date="http://exslt.org/dates-and-times" 
    extension-element-prefixes="date"
    ...>

    <xsl:import href="date.xsl" />

    <xsl:template match="//root">
       <xsl:value-of select="date:date-time()"/>
    </xsl:template>
</xsl:stylesheet>


MSXML 파서의 경우 다음을 시도하십시오.

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:my="urn:sample" extension-element-prefixes="msxml">

    <msxsl:script language="JScript" implements-prefix="my">
       function today()
       {
          return new Date(); 
       } 
    </msxsl:script> 
    <xsl:template match="/">

        Today = <xsl:value-of select="my:today()"/>

    </xsl:template> 
</xsl:stylesheet>

msxsl : script를 사용한 XSLT 스타일 시트 스크립팅JScript, C # 및 Visual Basic .NET으로 XSLT 확장 도 읽어보십시오 .


변환 실행을 제어 할 수 있습니까? 그렇다면 현재 날짜를 XSL에 전달하고 XSL 내부에서 $ current-date를 사용할 수 있습니다. 다음은 들어오는 매개 변수를 선언하는 방법이지만 변환을 실행하는 방법을 알기 때문에 값을 전달하는 방법을 말할 수 없습니다.

<xsl:param name="current-date" />

예를 들어, bash 스크립트에서 다음을 사용하십시오.

xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml

그런 다음 xsl에서 다음을 사용할 수 있습니다.

<xsl:value-of select="$current-date"/>

...
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:local="urn:local" extension-element-prefixes="msxsl">

    <msxsl:script language="CSharp" implements-prefix="local">
        public string dateTimeNow()
        {       
          return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
        } 
    </msxsl:script>  
...
    <xsl:value-of select="local:dateTimeNow()"/>

Late answer, but my solution works in Eclipse XSLT. Eclipse uses XSLT 1 at time of this writing. You can install an XSLT 2 engine like Saxon. Or you can use the XSLT 1 solution below to insert current date and time.

<xsl:value-of select="java:util.Date.new()"/>

This will call Java's Data class to output the date. It will not work unless you also put the following "java:" definition in your <xsl:stylesheet> tag.

<xsl:stylesheet [...snip...]
         xmlns:java="java"
         [...snip...]>

I hope that helps someone. This simple answer was difficult to find for me.


format-date(current-date(), '[M01]/[D01]/[Y0001]') = 09/19/2013
format-time(current-time(), '[H01]:[m01] [z]') = 09:26 GMT+10
format-dateTime(current-dateTime(), '[h1]:[m01] [P] on [MNn] [D].') = 9:26 a.m. on September 19.

reference: Formatting Dates and Times using XSLT 2.0 and XPath

참고URL : https://stackoverflow.com/questions/1575111/can-an-xslt-insert-the-current-date

반응형