2009-08-18 3 views
0

웹에서 사용할 수있는 기술을 읽고 XSL을 사용하여 중복 된 XML 파일에서 고유 항목 목록을 추출했습니다.XSL : 그룹화와 호출 템플릿 조합

2 개 카테고리별로 범위 : 1) Muenchian 방법 (예 : http://www.jenitennison.com/xslt/grouping/) 2) 또는 이전 형제 룩업 이들 모두 그룹 데이터를 선택하는 XPath 표현에 의존한다.

그러나 XML 파일에서 데이터가 "기본적으로"XML 파일에 존재하지 않습니다. 내 요소에서 일부 집계 데이터를 계산하기 위해 xsl : 템플릿을 사용하고 있습니다. 또한 집계 된 데이터를 기반으로 그룹화하려고합니다.

<filmsreview> 
    <record><data name='movie'>Star Wars</data><data name='ratings'>John:Good, Mary:Good</data></record> 
    <record><data name='movie'>Indiana Jones</data><data name='ratings'>John:Good, Mary:Bad, Helen:Average</data></record> 
    <record><data name='movie'>Titanic</data><data name='ratings'>John:Bad, Helen:Good</data></record> 
</filmsreview> 

나는 데이터의 구조화가 완벽하지 알고 및 하위 요소를 작성하여 I 쉽게 일을 할 수 있지만 쉽게 데이터 소스를 변경, 그래서 못하게 할 수 있습니다 : 예를 들어

내가 가진 이것을 도전으로 받아 들여라.

그리고 나는 요한의 독특한 평가가 정리 해보 구축하고 싶습니다 : 존의 등급 : 좋은 나쁜

나는 XSL이 : 기록 요소를 가지고이 레코드 존의 등급을 반환 할 수 있습니다 템플릿 : 예 :

<xsl:template name="get_rating"> 
    <xsl:param name="reviewer" /> 
    <!-- I use some string manipulation, and xsl:value-of to return the review for John--> 
</xsl:template> 

난 그냥 XSL에서 호출 할 수 있습니다 : 각각에 대한 요한의 검토의 완전한 목록을 얻을 수 있습니다. 그러나이 호출을 고유 한 값을 가져 오는 메소드와 결합 할 수는 없습니다.

XML 파일을보다 구조화 된 방식으로 변환하려면 중간 XSL을 사용해야합니까? 아니면 한 번에 할 수 있습니까?

많은 감사 제라드

답변

1

흠 ...이 XSLT 변수와 노드 집합 방법,이 같은 아마 뭔가 사용 가능해야한다 :

<xsl:variable name="_johnsRatings"> 
    <xsl:apply-templates select="/" mode="johnsRatings" /> 
</xsl:variable> 
<xsl:variable name="johnsRatings" select="msxsl:node-set($_johnsRatings)" /> 

<xsl:template match="/" mode="johnsRatings"> 
    <Ratings> 
     <xsl:for-each select="/filmsReview/record/data[@name='ratings']"> 
       <Rating><xsl:call-template name="get_rating" /></Rating> 
     </xsl:for-each> 
    </Ratings> 
</xsl:template> 

이 시점에서를, 쿼리 할 수 ​​있어야한다 $ johnsRatings 변수

을하는 데 도움이

희망 ... 표준 XPath 쿼리를 사용하여, 당신은 당신이 그것에서 고유 한 값을 검색하기 위해 위에서 언급 한 두 가지 방법 중 하나를 사용할 수 있습니다

편집 : 어떤 XSLT 엔진을 사용하고 있는지 알 수 없으므로 msxsl : node-set() 함수에 액세스 할 수 있다고 가정했습니다. 그러나 대부분의 XSLT 프로세서에는 비슷한 메서드가 있으므로 프로세서에서 동일한 메서드를 검색해야 할 수도 있습니다.

+0

감사합니다.이 대답을 통해 솔루션을 찾을 수있었습니다. 답을 완료 할 수 몇 가지 : 다음 속성은 XSL에 추가해야합니다 : 스타일 요소를 의 xmlns : msxsl을 = "항아리 : 스키마 - 마이크로 소프트 닷컴 : XSLT" 을 핵심 요구 사항을 다음하는 것은 정의되어야한다 : 고유 항목을 가져 오는 데 다음 루프를 사용할 수 있습니다.