XSLT

2013-08-14 2 views
0

통해 XHTML 태그의 글꼴 크기 속성을 변경 나는이XSLT

<span style="font-size:8px;"><font size="3"><strong style="font-size:14pt;">EXAM: </strong>Head</font></span> 

과 같은 몇 가지 XHTML을 그리고 나는 모든 글꼴 크기가이

<strong>EXAM: </strong>Head 
처럼 보이도록 특성을 제거하려면

나는

<xsl:template match="font size"> 
    <xsl:copy> 
    <xsl:copy-of select="@*" /> 
     <xsl:apply-templates select="node()" /> 
    </xsl:copy> 
</xsl:template> 

을 시도하지만 전체 노드를 제거합니다. 어떤 제안?

답변

0

match="font size" 전혀 아무것도 일치하지만, 당신은 그것을 일치하는 요소와 그 요소의 속성을 모두 복사해야 보여 템플릿뿐만 아니라 요소의 모든 자식 노드를 처리하지 않아야있는 템플릿입니다. 따라서 표시하는 템플릿이 실제로 실행되는 경우 입력에서 노드를 전혀 제거하면 안됩니다. 나는 당신이 붙여 놓은 것이 실행중인 코드의 정확한 반영이 아니거나 관찰중인 행동을 오해하고 있다고 추론한다.

당신은 당신은 내가 누구의 유일한 기능 인생의 글꼴 크기 속성을 수행하기 위해 모든 style 특성을 의미하는 것으로 받아 "모든 글꼴 크기 속성을 제거"하고 싶은 말은. 그러나 샘플 출력에서는 spanfont 요소도 제거했습니다. 나는이 예가 믿어 져야한다고 생각한다. 내가 문제를 정확하게 이해한다면

, 당신은 대부분이 항등 변환하는 변환을 원하지만 세 가지를 변경한다.

먼저 당신은 그들이 포함하는 모든이 font-size 설정 인 경우 style 속성을 억제합니다. 이것은 당신의 XSLT에 CSS 파서를 작성하지 않고 일반적인 경우 안정적으로 할 수 있지만,의 당신은 간단한 테스트로하여 얻을 수있는 가정하자 실제로 쉽지 않다하십시오 style 속성이 폰트 크기 설정으로 시작하는 경우, 그것은 죽는다.

당신이 정상 ID를 사용하는 경우는 이미 변환 속성을 처리하는 규칙을 가지고는 XSLT 1.0 스펙에 주어진 것과 같은 변형. 우리는이 스타일 속성 집합을 재정의하고 싶습니다.이 속성 집합은 전체적으로 억제하려고합니다. 쓰기 :

<xsl:template match="@style[starts-with(.,'font-size')]"/> 

둘째, 당신은 글꼴 크기 설정으로 시작 스타일 속성을 가지고 스팬 요소를 억제합니다. 실제로 똑똑한 테스트는 '클래스'속성과 다른 것들이 없다는 것을 검사 할 수도 있지만 독자의 연습으로 남겨 둘 것입니다. 여기에서는 내용을 숨기고 싶지 않지만, 출력에서 요소를 원합니다.

<xsl:template match="xh:span 
        [starts-with(@style,'font-size')]"> 
    <xsl:apply-templates/> 
</xsl:template> 

마지막으로, 당신은 글꼴 요소와 같은 일을하고 싶지 : 과정 내용을하지만, 요소 자체 드롭 :

<xsl:template match="xh:font"> 
    <xsl:apply-templates/> 
</xsl:template> 
을 따라서 템플릿의 내용은 신청 서식하는 단지 호출입니다

경우 아이디가 제대로 출력을 포함하는 유사한 XHTML 문서 만 그대로 유지 다른 것들로 입력을 포함하는 XHTML 문서를 변환이 세 가지 템플릿을 증강 변환.

멋지고 일
+0

! 설명 주셔서 감사합니다. 나는 단순한 변형 이상의 것을 성취하려고 노력하고 있었다는 느낌이 들었다. – user2683654