2009-06-22 9 views
0

각 텍스트 노드에 부모 노드를 추가하는 텍스트 필터를 구현하려고합니다.XSLT - text() 노드에 태그 추가

<xsl:template match="text()"> 
    <aNewTag><xsl:value-of select="."/></aNewTag> 
</xsl:template> 

이 내가 의해 간접적으로 호출 할 때까지 잘 작동 :

<xsl:apply-templates/> 

하지만 템플릿을 호출하면 바로 새 태그가 사라

<xsl:apply-templates select="text()"/> 

를 사용하여.

아무도 나를 설명 할 수 있습니까?

건배

당신이 XAL 사용하는 경우
+0

에 대해 설명하는 글이다. 는 텍스트 노드를 선택하는 데 사용한 방법에 관계없이 적용됩니다. 즉, 실패한 XML 및 XSLT 코드 샘플을 게시해야합니다. – Tomalak

답변

0

: 선별 된 특성이없는 적용 - 템플릿 요소를 선택의 값은 암시 적으로, 즉 노드() 모든 자식 노드 따라서 텍스트() 템플릿으로 설정 일치합니다.

1

나는 내 자신의 코드로 약간 혼란 스러웠다. 완전한 예는 다음과 같습니다

<xsl:template match="/"> 
    <xsl:call-template name="a"> 
     <xsl:with-param name="b"> 
      <xsl:apply-templates select="text()"/> 
     </xsl:with-param> 
    </xsl:call-template> 
</xsl:template> 

<xsl:template name="a"> 
    <xsl:param name="b"/> 
    <xsl:value-of select="$b"/> <!-- here is my error --> 
</xsl:template> 

<xsl:template match="text()"> 
    <aNewTag> 
     <xsl:value-of select="."/> 
    </aNewTag> 
</xsl:template> 

내 오류가 있었다, 내가 호출 템플릿의 value-of 볼 수없는 것을. value-ofapply-templates으로 변경하면 모든 것이 정상적으로 작동합니다.

덕분에

0

나는 문제가 생각하는 템플릿의 ""파라미터 "B"는 노드 집합이다. 이에 액세스하려면 XSL에서 "노드 세트"확장 기능을 사용해야 할 수도 있습니다. 표준 XSLT의 일부가 아니므로 확장을 지정해야합니다.

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="urn:schemas-microsoft-com:xslt"> 
    <xsl:template match="/"> 
     <xsl:call-template name="a"> 
      <xsl:with-param name="b"> 
       <xsl:apply-templates select="text()"/> 
      </xsl:with-param> 
     </xsl:call-template> 
    </xsl:template> 
    <xsl:template name="a"> 
     <xsl:param name="b"/> 
     <xsl:for-each select="ext:node-set($b)"> 
      <xsl:copy-of select="."/> 
     </xsl:for-each> 
    </xsl:template> 
    <xsl:template match="text()"> 
     <aNewTag> 
      <xsl:value-of select="."/> 
     </aNewTag> 
    </xsl:template> 
</xsl:stylesheet> 

이 항목은 Microsoft XML 파서 (MSXML)에서만 작동합니다. xsltproc과 같은 다른 XML 프로세서의 경우 "http://exslt.org/common"네임 스페이스를 사용해야합니다.

"b"매개 변수를 구성하는 노드에 액세스 할 수 있습니다. 위의 예에서 반복 할 때 사용했지만 노드에 액세스 할 수 있습니다. 여기

이 나를 위해 지속적으로 작동, 당신이 준 정보로 노드 집합

XML.Com Article

관련 문제