2011-03-06 3 views
2

나는 다음과 같은 XSLT가 :XSLT는 템플릿의 요소를 무시합니까?

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:html="http://www.w3.org/TR/REC-html40" 
     xmlns:fo="http://www.w3.org/1999/XSL/Format" 
     xmlns:o="urn:schemas-microsoft-com:office:office"  
     xmlns:x="urn:schemas-microsoft-com:office:excel" 
     xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
    <xsl:output method="xml" indent="yes" /> 
     <xsl:strip-space elements="*" /> 

     <xsl:template match="ss:Workbook/o:DocumentProperties/o:*"/> 
     <xsl:template match="ss:Workbook/x:ExcelWorkbook/x:*"/> 
     <xsl:template match="ss:Workbook/x:ExcelWorkbook/x:*"/> 
     <xsl:template match="ss:Workbook/ss:Worksheet/x:WorksheetOptions/x:*"/> 
     <xsl:template match="ss:Workbook/ss:DocumentProperties/ss:*"/> 

     <xsl:template match='ss:Workbook/ss:Worksheet/ss:Table'> 
     <grade-dist> 
      <xsl:apply-templates select='ss:Workbook/ss:Worksheet/ss:Table'/> 
     </grade-dist> 
     </xsl:template> 

     <xsl:template match='ss:Workbook/ss:Worksheet/ss:Table'> 
.... 

내 XML 출력 벌금을,하지만 난 해달라고 왜 <grade-dist>하고 모두 완전히 무시처럼의 </grade-dist> 는 것, 어떤 생각을?

감사합니다,

+1

좋은 질문, +1. 설명과 두 가지 해결책에 대한 내 대답을보십시오. :) –

답변

6

당신은 정확히 같은 경기 패턴이 템플릿을 가지고있다. 'ss:Workbook/ss:Worksheet/ss:Table' 일치하는 템플릿 내부

<xsl:apply-templates select='ss:Workbook/ss:Worksheet/ss:Table'/> 

, 아마 잘못된입니다 - 'ss:Workbook/ss:Worksheet/ss:Table' 그랜드 그랜드을 'ss:Workbook/ss:Worksheet/ss:Table' 요소가 될 것 같지는 않다 :

또 다른 관찰은 명령가 있다는 것입니다 -부모의.

나는 당신이 원하는 것은이 같은 생각 :

<xsl:template match='ss:Workbook/ss:Worksheet/ss:Table'> 
    <grade-dist> 
     <xsl:apply-templates select="." mode="pr2"/> 
    </grade-dist> 
</xsl:template> 

<xsl:template mode="pr2" match='ss:Workbook/ss:Worksheet/ss:Table'> 
<!-- Some necessary processing --> 
</xsl:template> 

하거나 :

<xsl:template match='ss:Workbook/ss:Worksheet/ss:Table'> 
    <grade-dist> 
     <!-- Do the processing here --> 
    </grade-dist> 
</xsl:template> 
+0

그런 놀라운 대답! 대단히 감사합니다! 내 질문을 해결했다. – snoofkin

+1

+1. 참으로 철저합니다. – Flack

1

그것은 당신이 누구의 일치 기준 (즉, 어떤 모드 또는 우선 순위를 구별하기 위해 속성 없음) 동일한 두 개의 템플릿이있는 경우로 보인다. 프로세서가 첫 번째 프로세스를 우회하여 "이기기"때문에 두 번째 프로세스를 처리하면이 프로세스는 관찰중인 결과를 얻게됩니다 (이후 grade-dist 내부의 apply-templates의 목적은 두 번째 템플릿을 호출하는 것입니다) . 이 복구 가능한 오류이며, 여기 관찰 복구가 마지막으로 제공되는 템플릿을 선택 얻을 수있는 XSLT 사양에 따라 'ss:Workbook/ss:Worksheet/ss:Table'

:

관련 문제