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


92

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

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

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


문제인 파서가 무엇인지 모르겠습니다. 내가 사용한 프로그램은 보고서를 직접 내보내고 프로그램 디렉토리의 XSLT 파일을 사용하여 보고서를 생성합니다.
Eric Anastas

답변:


115

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>


7
.net / c #을 사용하는 사람이라면 표준 .NET XSLT 변환기를 사용하여 EXSLT 가져 오기를 수행하는 데 너무 많은 시간을 소비하지 말고 MVP.XML을 즉시 사용 하십시오 . ESXLT에 대한 지원내장되어 있습니다.
Joel Purra 2012-07-25

14

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 확장 도 읽어보십시오 .


Apache FOP를 변환기로 사용하면 작동하지 않습니다. 오류 메시지 : 오늘 메서드에 대한 인스턴스 메서드 호출에는 첫 번째 인수로 Object 인스턴스가 필요합니다.
Trey Carroll

1
죄송합니다 : extension-element-prefixes = "msxml"은 extension-element-prefixes = "msxsl"이어야합니다. 내 시스템에서도 작동하지 않습니다.
Jay는

14

변환 실행을 제어 할 수 있습니까? 그렇다면 현재 날짜를 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"/>

1
실제로 값을 전달하는 방법은 시스템에 따라 다릅니다. 가능한 옵션 중 하나 : UNIX에서 xsltproc 을 사용하면 다음과 같을 수 있습니다 xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml. 일부 시스템은 매개 변수를로만 취 하므로이 $param=value경우 $current-date=`date +%Y-%m-%d`어딘가에 있습니다. 또는 사용중인 XSLT 프로세서에서 매개 변수를 지정하는 방법을 찾으십시오.
lindes

10
...
    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()"/>

7

늦은 답변이지만 내 솔루션은 Eclipse XSLT에서 작동합니다. Eclipse는이 글을 쓰는 시점에서 XSLT 1을 사용합니다. Saxon과 같은 XSLT 2 엔진을 설치할 수 있습니다. 또는 아래 XSLT 1 솔루션을 사용하여 현재 날짜와 시간을 삽입 할 수 있습니다.

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

이것은 날짜를 출력하기 위해 Java의 Data 클래스를 호출합니다. <xsl:stylesheet>태그 에 다음 "java :"정의를 추가하지 않으면 작동하지 않습니다 .

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

누군가에게 도움이되기를 바랍니다. 이 간단한 대답은 저에게 어려웠습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.