2016-08-18 3 views
1

입력 XML을 사용 :제거 공간 XSLT를

<label>1.1 </label> 

<title> Testing</title> 

<p> This is subsection </p> 

출력 XML :

<label>1.1</label> 

<title>Testing</title> 

<p>This is subsection</p> 

태그가 무엇이든 관계없이 태그가있는 값을 근접 촬영하고 싶습니다. 시작 위치 또는 끝 위치의 공간.

답변

0

당신은 텍스트 노드

<xsl:template match="text()[normalize-space()]"> 
    <xsl:value-of select="replace(., '^\s+|\s+$', '')"/> 
</xsl:template> 

후 선행 또는 공백이 제거 된 경우에만 아닌 텍스트 노드에 후행 공백에 대한 템플릿을 작성하는 경우. 당신은 또한 혼합 내용 (텍스트 노드의 아이뿐만 아니라 두 요소 자식을 함유 한 요소)를 가질 수 있다면

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 

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

    <xsl:template match="text()[normalize-space()]"> 
     <xsl:value-of select="replace(., '^\s+|\s+$', '')"/> 
    </xsl:template> 

</xsl:stylesheet> 

하고 싶지 않은 : 다른 노드의 경우 변경하여 복사 할 정체성 변환 템플릿을 사용할 수 있습니다 또,` 참조 스팟 실행 <xsl:template match="*[not(*)]/text()[normalize-space()]">에 일치하는 패턴을 변경 혹은 단순히 당신은 영업 이익이 혼합 된 콘텐츠에 대한 특별 조항을 활용할 수 있도록 할 수 있습니다

<xsl:template match="*[not(*)]"> 
    <xsl:copy> 
     <xsl:value-of select="replace(., '^\s+|\s+$', '')"/> 
    </xsl:copy> 
</xsl:template> 
+0

을 사용하여 다음 치료에 대상으로 할 수 없다.'는 ''이됩니다 스폿 실행을 참조하십시오.'. – kjhughes

+0

@kjhughes, 맞습니다. 혼합 된 콘텐츠에는 다른 접근 방식이 필요할 수도 있습니다.이 경우 도움이 될 수있는 두 가지 제안이 추가되었습니다. –

+0

아마 그 사람의 요구를 충당 할 것입니다. 또 다른,보다 복잡한 솔루션은 혼합 된 내용의 첫 번째 및 마지막 텍스트 노드를 특수한 경우에 선행 공백이나 후행 공백을 선택적으로 다듬을 수 있습니다. – kjhughes