2013-06-13 2 views
1

을 사용하여 XSLT 1.0을 사용하십시오.XSLT에서 마지막 쉼표를 제거하십시오

<xsl:for-each select="*"> 
    <xsl:variable name="xxxx" select="@name" /> 
    <xsl:if test="../../../../fieldMap/field[@name=$xxxx]">... 
     <xsl:if test="position() != last()">////this is not work correctly as last() number is actual last value of for loop and position() is based on if condition. 
      <xsl:text>,</xsl:text> 
     </xsl:if> 
    </xsl:if> 
</xsl:for-each> 

여기에 마지막으로 ','을 어떻게 제거 할 수 있습니까?

+0

샘플 입력 및 출력 데이터를 제공 할 수 있습니까? 나는 "위치 (if)는 if 조건에 기반하고있다"라고 생각하지 않는다. 아니면 그게 무슨 뜻인지 이해하지 못할 수도 있습니다. – LarsH

답변

6

position()last()은 루프를 기반으로해야하며 xsl:if이 아니어야합니다. 제 생각에는 실제로이 요소가 실제로 루프의 마지막 요소가 아니기 때문에 이것이 xsl:if이 참인 마지막 요소인지 확인하고 싶다는 것입니다.

xsl:for-eachxsl:if을 하나로 결합하고 해당 조건에 해당하는 요소 만 선택하는 것이 좋습니다. 그렇게하면 예상했던대로 위치를 확인할 수 있습니다.

<xsl:for-each select="*[@name = ../../../../fieldMap/field/@name]> 

    <xsl:if test="position() != last()"> 
     <xsl:text>,</xsl:text> 
    </xsl:if> 
</xsl:for-each> 
+0

여기 fieldMap/field/@ name은 여러 필드/@ name 요소이고 다른 비교 요소는 여러 요소 */@ name입니다. 그것은 작동 할 것인가? */@ name과 ../../../field.map/field/@name의 일치는 조건을 위해서? – dsi

+1

글쎄, 왜 그것을 시도하고 발견하지 마! ;) 또는이 정보를 사용하여 질문을 편집하고 입력 XML 및 예상 출력을 이상적으로 표시하여 명확하게 표시 할 수 있습니까? 고맙습니다! –

+0

조금 늦게 반응하여 죄송합니다. 예, 그것은 저에게 효과적이며 모든 요소 집합과 비교됩니다. 그 예는 다른 포스트 http://stackoverflow.com/questions/17095746/in-xslt-many-to-many-attributes-comparing-in-for-each-condition에서도 볼 수 있습니다. 많은 감사. – dsi

1

을 변경할 수 있습니다 당신의 내면 if에 :

<xsl:if test="not(following-sibling::*[ 
        @name = ../../../../fieldMap/field/@name])"> 
     <xsl:text>,</xsl:text> 
    </xsl:if> 

가 BTW이 때문에 "일반적인 비교"로 작동합니다. 나는. (A)에 의해 선택된 임의의 노드는, 아마도 변수로 ../../../../fieldMap/field/@name 넣고 선언 할 DRY을 위해서 B.

의해 선택된 노드를 (동일 값을 가짐)와 동일한 경우

A = B 

는 사실 그것은 for-each 루프가 시작하기 전에 : $ fieldName에는 여러 속성 노드의 노드 집합 일 수있다 다시

<xsl:variable name="fieldNames" select="../../../../fieldMap/field/@name" /> 
<xsl:for-each select="*"> 
    <xsl:if test="$fieldNames = @name">... 
     <xsl:if test="not(following-sibling::*[@name = $fieldNames])"> 
      <xsl:text>,</xsl:text> 
     </xsl:if> 
    </xsl:if> 
</xsl:for-each> 

을 우리가 $fieldNames = @name을 말할 때, 우리는 물어 여부 @name equa의 값 모든 노드의 값은 $fieldNames입니다.

관련 문제