2012-10-02 2 views
0

나는 다음 코드xslt 결과 집합의 요소 만 마지막 요소가 아닙니까?

<xsl:for-each select="book"> 
    <xsl:value-of select="title"/><xsl:if test="position() != last()">,</xsl:if> 
</xsl:for-each> 

나는 그것이 쉼표로 구분 된 책 제목의리스트가되고 싶어요에게 있습니다.

목록에 책이 없을 때 결과가 정확합니다. 둘 이상의 책이있을 때도 정확합니다.

그러나 책이 정확히 하나만 있으면 끝에 쉼표가 인쇄됩니다.
마지막 요소 인 경우 쉼표 만 인쇄하도록 조건을 변경하면 책이 하나만있는 경우 쉼표가 인쇄되지 않습니다.

그래서 마지막 요소로 처리되지 않는 요소가 하나만있는 것처럼 보입니다. 이 문제를 어떻게 처리 할 수 ​​있습니까?

샘플 XML : 거기 목록에 두 권의 책은, 내가 두 번째 항목을 삭제하면

My book, Another book

, 나는

를 얻을 수이

<booklist> 
    <book> 
    <title>My book</title> 
    <author>Some author</author> 
    </book> 
    <book> 
    <title>Another book</title> 
    <author>Another author</author> 
    </book> 
</booklist> 

과 같이 보입니다

My book,

편집 :

나는 문제를 발견했다. <xsl:apply-templates>을 사용하여 데이터 집합을 선택한 다음 각 책에 대한 다른 템플릿 내부에서 위치 확인을 수행하고있었습니다. 그러나 last()은 필터링 된 하위 집합이 아니라 원래 데이터 집합을 나타냅니다.

+0

당신이 사용하는 XML을 공유 할 수 있습니까? 귀하의 변형이 올바른 것 같습니다. – Satyajit

답변

0

다음 작품 (I없이 책에는 쉼표를 얻을 수없고, NN -1 쉼표 N> 0 경우). XSLT 프로세서가 고장난 것 같습니다.

XSLT ("x.xsl") :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes" encoding="iso-8859-1" media-type="text/xhtml" doctype-public="-//W3C//DTD HTML 4.0//EN"/> 
    <xsl:template match="/"> 
    <xsl:for-each select="root/book"> 
     <xsl:value-of select="title"/><xsl:if test="position() != last()">;</xsl:if> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

는 XML :

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet href="x.xsl" type="text/xsl"?> 
<root> 
    <book> 
    <title>A</title> 
    </book> 
    <book> 
    <title>B</title> 
    </book> 
</root> 
0

"test()"란 무엇입니까? 나는 당신이 "last() - 1"을 원한다고 생각합니다. 파이어 폭스에서 나를 위해 좋은

+0

죄송합니다. 오타가 의미하는 '마지막()'사실, 왜 내가 마지막() - 1을 원하니? 인덱스가 제로입니까? 나는 그 제안을 시도했지만 쉼표는 여전히 한 권의 책에 대한 것이다. – MxyL

+0

아니요, 죄송합니다. 직접 펜스 포스트 오류를 ​​삽입했습니다. – Buster