2010-07-30 4 views
1

속성 다른 방법은 XML의 선이나 줄 바꿈 문자의 수를 계산하는 나는 XML 요소 :XSL의 질문 :

<xsl:if test="string-length(@Example) - string-length(translate(@Example, '&#xa;', '')) &lt; 10"> 

에서 행의 수를 찾는이 방법을 발견하기 위해 인터넷을 샅샅이했습니다 위의 예제에서 @Example은 줄 수를 계산하는 요소입니다.

당신이 볼
<xsl:if test="string-length(@Example) - string-length(translate(@Example, ' 
', '')) &lt; 10"> 

이 코드 &#xa; 그것이 나타내는 (문자 그대로의 빈 라인으로 전환됩니다하지만 난 그것을 원하지 않는다 :이 자동으로 설정됩니다 때문에 나는, 그러나,이 코드를 좋아하지 않았다 빈 줄이되어야 함). 위의 코드는 나에게 나쁜 코딩 스타일처럼 보입니다 (그렇지 않다면 말해주세요). 그래서 @Example에서 줄 수를 찾기위한 대체 방법이 필요합니다. 고맙습니다.

+0

제목을 편집해야합니다. 당신은 요소가 아니라 속성을 다루고 있습니다. 또한, 내 마지막 답변으로, XSLT 2.0 (분석되지 않은 문서에 액세스하고 정규 표현식을 사용)으로이 작업을 수행 할 수 있습니다. 그러나 XSLT 2.0에 대한 완전한 대답은 입력 샘플과 원하는 출력을 필요로합니다. –

+0

쏴, 당신이 댓글을 달았는지 몰랐다. 죄송합니다, 나는 xsl 또는 xml에 대한 근본적인 이해가 없으므로 물건들이 내 머리 위로 간다. 그러나 xslt 2.0을 살펴볼 것이다. – ShareOnPoint

+0

좋은 질문 (+1). 나는 더 나은 것을 찾기 위해 열심히 노력했고, 나는 그랬다고 생각한다. 나의 대답을 보라. –

답변

0

이 스타일은 기본 설정 아마 가까운 :

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:variable name="vNL" select="'&#xA;'"/> 

<xsl:template match="t"> 
    <xsl:value-of select= 
    "string-length(@Example) 
    - 
    string-length(translate(@Example, $vNL, ''))"/> 
</xsl:template> 
</xsl:stylesheet> 

내셔널 리그 상수는 변수에 보관되며이 변수를 참조하는 것은 새로운 라인을 표시하는 에디터가 발생하지 않습니다.

심지어 $vNL 선언

이 문제으로 경화 될 수있다 - 세계적으로 <xsl:param>이 이루어진다 제공 값 변환의 외부 호출자에 의해 제공된다.

+0

예. 그러나 이전에 대답했듯이 입력 소스에있는 새로운 행 ** 문자 참조 **만이 정규화 후에 속성 값으로 유지됩니다. –

+0

@Alejandro : 죄송합니다. 전 완전히 잃었습니다. 무슨 문제라도 있습니까? –

0

그냥 내 이전의 대답 (https://stackoverflow.com/questions/3366181/sharepoint-designer-keeps-turning-xa-within-source-code-into-literal-new-line)

(Dimitre와 동일)이 스타일 시트 실행의 해명 : 입력으로 자체

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:variable name="vNL" select="'&#xA;'"/> 

<xsl:template match="xsl:value-of"> 
    <xsl:value-of select= 
    "string-length(@select) 
    - 
    string-length(translate(@select, $vNL, ''))"/> 
</xsl:template> 
</xsl:stylesheet> 

을, 출력 : 만

0 

그것은 다음과 같은 입력으로 작동합니다.

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:variable name="vNL" select="'&#xA;'"/> 

<xsl:template match="xsl:value-of"> 
    <xsl:value-of select= 
    "string-length(@select)&#xA; 
    -&#xA; 
    string-length(translate(@select, $vNL, ''))"/> 
</xsl:template> 
</xsl:stylesheet> 

출력 :

2