XSLT에서 매개변수 설정
XSLT 스타일시트에서 매개변수를 사용하려면 스타일시트 자체에서 글로벌 매개변수로 매개변수를 선언합니다.
프로시저
- 속성을 사용하여 매개변수에 대한 유형을 선언하십시오. 다음 스타일시트는 명시적으로 둘 중 하나에 유형을 지정하여 2개의 매개변수를 선언합니다.
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:param name="targetDate" as="xs:date"/> <xsl:param name="window" select="3"/> <xsl:template match="/"> <table> <tr><td>Task</td><td>Due</td><td>Status</td></tr> <xsl:apply-templates select="todo-list/task[xs:date(@due) le $targetDate + xs:dayTimeDuration(concat('P', $window, 'D'))]"> <xsl:sort select="@due"/> </xsl:apply-templates> </table> </xsl:template> <xsl:template match="task"> <tr> <td><xsl:value-of select="."/></td> <td><xsl:value-of select="format-date(xs:date(@due), '[MNn] [D1o]')"/></td> <td> <xsl:choose> <xsl:when test="xs:date(@due) lt $targetDate">OVERDUE by <xsl:value-of select="days-from-duration($targetDate - xs:date(@due))"/> day(s)</xsl:when> <xsl:otherwise>Due in <xsl:value-of select="days-from-duration(xs:date(@due) - $targetDate)"/> day(s)</xsl:otherwise> </xsl:choose> </td> </tr> </xsl:template> </xsl:stylesheet>
- 정적 컨텍스트에서 다른 항목을 선언하지 않아도 되므로
다른 스타일시트에서와 정확히 동일한 방식으로 글로벌 매개변수를 통해
XSLT 스타일시트를 준비하십시오. 이 스타일시트는 xsltSource 소스 오브젝트를 통해 사용 가능하다고 가정하고 다음 코드는 스타일시트를 준비합니다.
// Create the factory XFactory factory = XFactory.newInstance(); // Prepare the XSLT stylesheet XSLTExecutable xslt = factory.prepareXSLT(xsltSource);
- 매개변수를 사용하는 XSLT 스타일시트를 실행하려면 XDynamicContext
인스턴스를 사용하여 각 매개변수에 대한 값을 제공 또는 바인드하십시오.
필수 매개변수에 대한 값을 제공해야 합니다. 그렇지 않으면 오류가 발생합니다. 기타 매개변수의 경우 값을 제공하지 않으면 기본값이 사용됩니다. 스타일시트에 제공된 값이거나 0 길이의 문자열입니다.
XDynamicContext에는 여러 bind, bindItem, bindSequence 메소드가 있습니다. 각각 2개의 매개변수가 있습니다. 첫 번째는 매개변수 이름에 대응하는 QName 오브젝트이고, 두 번째는 값입니다.표 1. XDynamicContext bind, bindItem, bindSequence 메소드. 다음 표는 XDynamicContext bind, bindItem, bindSequence 메소드의 각 양식을 사용할 시점을 설명합니다.
메소드 목적 bind 단일 원자 값을 바인드할 때 사용 Java™ 유형에 대한 기본 유형의 표준 맵핑에 사용되는 각 Java 유형에 대해 이 메소드의 한 가지 양식이 있습니다. 두 개의 추가 양식이 있습니다(하나는 노드 오브젝트를 사용하고 하나는 소스 오브젝트를 사용함). 각각 DOM 트리에서 노드를 바인드하고 문서 노드를 생성하도록 새 소스를 구문 분석하는 데 사용됩니다.
bindItem XItemView 오브젝트로 단일 항목을 바인드할 때 사용 XItemView 오브젝트는 XItemFactory 인스턴스를 사용하여 생성되었거나 다른 표현식을 실행한 결과에서 얻을 수 있습니다.
bindSequence 하나의 항목보다 적거나 많은 시퀀스를 바인드할 때 사용 Java 유형에 대한 기본 유형의 표준 맵핑에 사용되는 각 Java 유형에 대해 이 메소드의 한 가지 양식이 있습니다. 각각 지정된 유형을 값 배열로 승인합니다.
XSequenceCursor를 사용하는 추가 양식이 있습니다. XSequenceCursor는 XItemFactory 인스턴스를 사용하여 생성하거나 다른 표현식을 실행한 결과일 수 있습니다.
다음 예제는 첫 번째 예제에서 준비한 XSLT 스타일시트를 실행합니다. 이때, 먼저 사용하는 각 매개변수에 대한 값을 바인드합니다. 이때 xsltResult라고 하는 결과 오브젝트가 이미 작성되었다고 가정합니다.// Create an xs:date value for the "targetDate" parameter with date "April 10, 2009" XMLGregorianCalendar date = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(2009, 4, 10, DatatypeConstants.FIELD_UNDEFINED); // Create a new dynamic context from the factory XDynamicContext dynamicContext = factory.newDynamicContext(); // Bind an atomic value for the "targetDate" parameter dynamicContext.bind(new QName("targetDate"), date); // Bind an atomic value for the "window" parameter dynamicContext.bind(new QName("window"), 7); // Create an XML input document String xml = "<todo-list>" + "<task due='2009-03-31' completed=''>File Quarterly Report</task>" + "<task due='2009-05-04' completed='2009-04-22'>Review candidate resumes</task> + "<task due='2009-04-16' completed=''>Order stock</task>" + "<task due='2009-05-01' completed=''>Buy concert tickets</task>" + "</todo-list>"; StreamSource source = new StreamSource(new StringReader(xml)); // Execute the stylesheet xslt.execute(source, dynamicContext, xsltResult);


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_params_xslt
파일 이름:txml_params_xslt.html