2011-04-13 4 views
0

I가이처럼 보이는 XML,문자열 처리 : 적용 템플릿

<Parent> Running text with marked up entities like 
    <Child>Entity1</Child> 
and, text in the middle too, and 
    <Child> Entity2 </Child> 
</Parent> 

내가 부모를 렌더링 할 때 줄 바꿈 및 들여 쓰기를 보존 할뿐만 아니라 모든 아이들에게 강조 템플릿을 적용 꼬리표.

XSL에서 일부 문자열 처리를 수행하기 위해 변수에서 상위 태그의 내용을 캡처하는 순간, 기본 xml 구조가 손실되고 하위 템플릿에 강조 템플릿을 적용 할 수 없습니다.

반면, 부모 태그에 포함 된 텍스트의 줄 바꿈 및 들여 쓰기를 유지하는 다른 방법은 생각할 수 없습니다.

아이디어가 있으십니까?

+0

"강조 템플릿 적용"은 무엇을 의미합니까? 'Child' 엘리먼트를 다른 엘리먼트로 둘러 쌀 필요가 있습니까? –

+0

샘플 입력 XML이 주어지면 현재 XSL과 변환 결과가 어떻게 보이는지 정확히 나타내야합니다. –

답변

0

이 스타일 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:preserve-space elements="*"/> 
    <xsl:template match="Parent"> 
     <div> 
      <xsl:apply-templates mode="preserve"/> 
     </div> 
    </xsl:template> 
    <xsl:template match="text()" mode="preserve" name="split"> 
     <xsl:param name="pString" select="."/> 
     <xsl:choose> 
      <xsl:when test="contains($pString,'&#xA;')"> 
       <xsl:value-of select="substring-before($pString,'&#xA;')"/> 
       <br/> 
       <xsl:call-template name="split"> 
        <xsl:with-param name="pString" 
        select="substring-after($pString,'&#xA;')"/> 
       </xsl:call-template> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="$pString"/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
    <xsl:template match="Child" mode="preserve"> 
     <b> 
      <xsl:apply-templates mode="preserve"/> 
     </b> 
    </xsl:template> 
</xsl:stylesheet> 

출력 :

<div> Running text with marked up entities like<br/> <b>Entity1</b><br/> and, text in the middle too, and<br/> <b> Entity2 </b><br/></div>

은 렌더링 :
Entity1 같은 마크 업 기관과

실행 텍스트
하고, 중간에 텍스트도 , 및
엔티티 2


편집 : 공백 만있는 텍스트 노드를 보존하는 것이 더 나은 예입니다.

+0

@Alejandro 환상적입니다! 나는 '모드'의 사용에 대해 몰랐다. 큰. 정말 고마워! – user706213

+0

@lwburk 강조 템플릿은 주위에 를 넣는 템플릿 일뿐입니다. – user706213

+0

@ user706213 : 안녕하세요. –

0

당신은 오히려 어려운 당신이 잘못 한 일을 이야기 할 수있는 코드를 표시하지 않은,하지만 당신이해야 할 때 설명하는 현상을 설명 할 일반적인 실수는

<xsl:variable name="x"> 
    <xsl:value-of select="some/node/path"/> 
</xsl:variable> 

을 작성하는 것입니다 서면

<xsl:variable name="x" select="some/node/path"/> 

앞으로 귀하의 코드가 표시되지 않으면 코드가 작동하지 않는다고 말씀하지 마십시오.

관련 문제