2011-02-23 3 views
1

공간을 절약하기 위해 SVG 속성의 수치 정밀도와 최소 지수를 줄여야합니다.SVG 최적화를위한 XSLT 반올림 속성

입력 :

<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250"> 
<circle cx="125.1111" cy="125.2222" r="124.9999" fill="red"/> 
</svg> 

는 출력 :

<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250"> 
<circle cx="125.1" cy="125.2" r="125.0" fill="red"/> 
</svg> 

어떤 스타일 결과를 얻을 것인가?
안전에 관한 의견이 있으십니까?

답변

2

이 스타일 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="@*[.=number()]"> 
     <xsl:attribute name="{name()}"> 
      <xsl:value-of select="format-number(.,'#.#')"/> 
     </xsl:attribute> 
    </xsl:template> 
</xsl:stylesheet> 

출력 :

<svg width="250" height="250" xmlns="http://www.w3.org/2000/svg"> 
    <circle cx="125.1" cy="125.2" r="125" fill="red"></circle> 
</svg> 
+0

+1 형식 번호. – Flack

+1

format-number가 반올림하는 정확한 방법은 XSLT 1.0에서 명시하지 않았 음을 경고하는 단어입니다. XSLT 2.0에서 수정되었습니다. –

+0

@Michael Kay : +1 완전 정확함, 결과는 MSXSL, Altova, Xalan XSLT 1.0 프로세서와 동일하지만; Saxon, Altova, XQSharp XSLT 2.0 프로세서와 Oracle XSLT 프로세서의 "중간"버전을 지원합니다. –

0
적용에

:

은 모든 경우에 작동하지 않을 것 적절한 분석을하지 않고 있지만, 보통 잘게 잘 작동 일부 소수점 자리에서 벗어나 최고가되기를 바란다. 그라디언트 (일반적으로 objectBoundingBox 공간에 정의 됨)의 소수점 이하 한 자리로 자르는 것은 objectBoundingBox 단위를 사용하는 다른 장소와 마찬가지로 좋지 않은 결과를 줄 수 있습니다 (속성 값은 일반적으로 [0..1] 범위 내에 있습니다). 나머지는 주로 현재 변환 (CTM)과 루트 svg 요소에서 사용되는 'viewBox'에 따라 다릅니다.

+0

두 번째 생각에서, 나는 아마도이 요소를 경로 교수 요소에만 적용해야합니다. 왜냐하면 그것들은 매달린 열매이기 때문입니다. 회전 각과 행렬은 벗어날 수 있습니다. viewBox는 없을 것입니다. –