2009-08-26 3 views
3

이 질문에 대한 변형이 게시되었지만 기본 사례를 찾을 수 없습니다. 가장 간단한 버전의 문제에 대한 정식 답을 얻는 것이 좋을 것이라고 생각했습니다. 이 질문은 xslt 1.0을 가정합니다. 나는 이런 식으로 뭔가를 보이는 변환을 사용하여 일반적으로 것비활성화 된 출력 이스케이프 처리로 XML 혼합 노드 변환

 
<paragraph> 
    This is some text that is <bold>bold</bold> 
    and this is some that is <italic>italicized.</italic> 
</paragraph> 

:

나는 혼합 노드를 포함하는 XML 문서, 예를 들어이 내가 사용하고자 할 때까지 잘 작동

 
<xsl:template match="bold"> 
    <b><xsl:apply-templates/></b> 
</xsl:template> 
<xsl:template match="italic"> 
    <i><xsl:apply-templates/></i> 
</xsl:template> 
<xsl:template match="paragraph"> 
    <p><xsl:apply-templates/></p> 
</xsl:template> 

disable-output-escaping = "yes"는 xsl : value-of의 속성입니다. 임베디드 노드와 독립적 인 값을 적용 할 수있는 혼합 노드의 텍스트 부분을 선택하는 방법이 있습니까?

내가 자식 노드를 상실하기 때문은 물론, 작동하지 않는

:

 
<xsl:template match="paragraph"> 
    <p><xsl:value-of select="." disable-output-escaping="yes"/></p> 
</xsl:template> 

나는 사실 나는 이것이 아마 내가 처리하고있는 방법으로 고유의 문제를 표현하려고 노력하고 알고 XML이지만 XML의 대부분은 (신뢰할 수있는) 사용자 입력에 의해 순진하게 생성되고 있으며 XML-> XSLT-> HTML 형식 (가능한 경우) 사이에 많은 추가 처리 코드를 피하려고합니다. 내가 바로 당신을 이해한다면

+0

당신은 ''등을 이스케이프 시키거나 원하지 않을까요? – Tomalak

+0

더 명확히하지 않아서 죄송합니다. 텍스트를 이스케이프 처리하고 싶지만 굵은 체와 같은 자식 노드를 계속해서 일치시킬 수 있기를 원합니다. –

답변

2

, 당신은 텍스트 노드가 같은 문자 텍스트 (disable-output-escaping="yes")을 나올하고자하지만, 변화의 나머지 부분은 템플릿 모드가 도움이 될 수 있습니다

(<b> 등을 <bold>) 정상적으로 작동합니다 :

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> 
    <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes" /> 

    <xsl:template match="paragraph"> 
    <p> 
     <xsl:apply-templates mode="literal" /> 
    </p> 
    </xsl:template> 

    <!-- literal templates (invoked in literal mode) --> 
    <xsl:template match="bold" mode="literal"> 
    <b><xsl:apply-templates mode="literal"/></b> 
    </xsl:template> 
    <xsl:template match="italic" mode="literal"> 
    <i><xsl:apply-templates mode="literal"/></i> 
    </xsl:template> 
    <xsl:template match="text()" mode="literal"> 
    <xsl:value-of select="." disable-output-escaping="yes" /> 
    </xsl:template> 

    <!-- normal templates (invoked when you don't use a template mode) --> 
    <xsl:template match="bold"> 
    <b><xsl:apply-templates /></b> 
    </xsl:template> 
    <xsl:template match="italic"> 
    <i><xsl:apply-templates /></i> 
    </xsl:template> 

</xsl:stylesheet> 
0

나는 (텍스트와 노드 내용이 혼합 된 노드를 처리하는) 비슷한 시나리오를 가지고 있습니다. 이것은 정말로 도움이되었습니다 : XSLT mixed content node

관련 문제