2014-09-29 1 views
0

저는 XSLT 코드 중 일부를 살펴 봤습니다. 코드가 상당히 복잡해졌습니다. 내가 DRY 코드를 좋아하고 OO 녀석이기 때문에, 나는이 간단한 논리에 대해 간단한 함수를 호출하고 싶습니다. 내 문제는 어떤 경우에는 10 개의 매개 변수 또는 다른 호출이 4를 전달할 때와 같은 일부 매개 변수를 전달하는 경우입니다. 기본 매개 변수를 사용할 수 있지만 함수에 10 개의 매개 변수가있는 것은 단지 추한 것입니다. 일반적인 객체 지향 프로그래밍 언어에서는 10 개의 속성을 가진 객체를 만들고이를 통과시켜 호출자 나 질문의 ​​서명을 일반적으로 변경하지 않고 속성을 확장 할 수 있습니다. xsl에 복잡한 유형이 있다는 것을 알고 있습니다. 그래서 이러한 기능에 대해 별도의 XSD를 작성해야하며, 다음과 같은 그것을 전달합니다XSLT는 객체를 매개 변수로 사용하여 작동합니다.

<xsl:function name="foo:doSomething"> 
    <xsl:param name="someComplexType"/> 
    ... 
    <xsl:variable name="field1" select="someComplexType/field1" /> 
</xsl:function> 

을하지만 좀 10 개의 서로 다른 선택기 내 새로운 형태를 구축하는 방법? 이렇게하는 것이 최선의 방법일까요? 아니면 그냥 10 개의 모든 매개 변수를 전달해야합니까? 개념적으로 10 개의 다른 매개 변수가 하나의 객체와 관련되어 있기 때문에 이해할 수 있으며 이렇게하는 것이 더 깨끗해 보입니다.하지만 앞으로도 계속 xslt에 대한 최상의 방법을 찾고 있습니다.

+0

같이, 스키마를 사용하지 않고, 하위 요소 요소에 전달할 수 있습니다 스키마 유형이 있다면 Saxon 9 EE와 같은 스키마 인식 프로세서가 필요합니다. 그거 있니? 그러나'as' 속성에 타입을 지정하지 않는 한 아무 것도 전달할 수 없습니다. –

+0

복잡한 스키마 유형을 처리 할 수있는 프로세서가 있다고 생각합니다. 객체를 생성하려면 어떻게해야합니까? concat 문이 큰 xsl : variable 요소를 사용하고 있습니다 (concat이 얼마나 많은 매개 변수를 취할 수 있는지도 모름). 처리중인 문서 외부에서 복잡한 스키마 유형을 생성하는 방법은 무엇입니까? –

+0

스키마에서 모든 유형을 정의해야합니다. XSLT 코드 내부에서 인스턴스를 만드는 것은 모든 XML에서와 마찬가지로 수행되며 리터럴을 사용하거나 요소 이름을 계산해야 할 경우'xsl : element '를 사용하면됩니다. 따라서 ...'. –

답변

0

스키마와 함께 복잡한 유형을 정의하고이를 XSLT에서 사용하려는 경우 Saxon 9 Enterprise Edition과 같은 스키마 인식 XSLT 2.0 또는 3.0 프로세서가 필요합니다.

쉽게 XSLT 코드 임시 XML 노드를 구성 할 수 있습니다 XSLT 2.0과 같은 복잡한 작업 할 경우 당신은 그러나

<xsl:variable name="foo1" as="element(foo)"> 
    <foo> 
    <bar><xsl:value-of select="whatever"/></bar> 
    <baz><xsl:value-of select="whatelse"/></baz> 
    ... 
    </foo> 
</xsl:variable> 
관련 문제