2011-03-16 4 views
0

먼저 my previous thread에 회신 해 주신 모든 분들께 감사드립니다. 혼란을 피하기 위해 여기에 비슷한 정보를 게시하고 있지만 그에 따라 업데이트되는 질문입니다.XSL generate-key()와 고유 한 요소

내 문제는 아래 표시된 xsl for-each가 결코 실행되지 않고 결과 집합에 아무것도 없음을 나타냅니다. 그러나, 나는 이유를 알 수 없다. 아래의 추가 설명. 내 XSL 파일의 맨 위에

입력 구조

<AllMyResults> 
<Result> 
<someElement>value</state> 
<otherElement>value 2</state> 
<subject>Get unique subjects!</state> 
</Result> 
</AllMyResults> 

나는 키 문장을 가지고

<xsl:key name="SubjectKey" match="All_Results/Result" use="subject"/> 

[2] 다른를 사용하여 내 XSL 파일의 고기 입력 구조 :

<xsl:for-each select="$ResultSet/subject[ 
         generate-id() 
          = generate-id(key('SubjectKey', 'subject')[1]) 
         ]"> 
... this point is never reached ... 
</xsl:for-each> 

위의 [2]에서 사용하는 입력 구조 입력 구조는 요소 목록 일뿐입니다.

무엇이 여기에 있습니까? for-each가 실행되지 않았 음을 확인하기 위해 디버거를 사용했습니다. 이는 표현식 $ResultSet/subject[generate-id() = generate-id(key('SubjectKey', 'subject')[1])]에 의해 생성 된 세트가 빈 세트 였음을 나타냅니다. 하지만 왜?

추가 정보

$없는 결과는 노드 집합이다. 그것은 템플릿에 전달 된 매개 변수였습니다. 내 디버거에 따르면 "핵심"문은 적절한 시간에 실행됩니다. 한 번 "피사체"가 입력 파일에 표시됩니다. params없이 generate-id()에 대해 읽은 바에 따르면, 현재 노드에서 작동합니다. $ResultSet/subject 대신 모든 종류의 유사 콘텐츠를 사용해 보았습니다. ($ResultSet/*/subject, $ResultSet/* 등)

+0

키 선언에 '결과'요소가 일치합니다 ... –

+1

XML에 AllMyResults라는 요소가 있지만 키 정의에 All_Results가 있습니다. 거의 틀림없이 오타가 있지만 질문에 오타를 만들면 사용자가 제공 한 정보를 신뢰할 수 없습니다. –

+0

으로 요소를 닫습니다. 유효한 XML로 보이지 않습니다. –

답변

0

내가 그 key('SubjectKey', 'subject')이 (인용 부호에주의)하지 key('SubjectKey', subject) 될 것으로 판단하고 술어가 $ResultSet에해야한다고하지 $ResultSet/subject :

$ResultSet[generate-id() = generate-id(key('SubjectKey', subject)[1])] 
+0

그래서 나는 를 사용하고 당신이 제안하고있는 것이 무엇인가 ..? 99 %는 이미 그걸 시도했지만, 나는 다른 것을 가질 것입니다. (나는 분명히 따옴표없이 & $ ResultSet 만 사용하여 따로 따로 따로 시도했지만, 한번에 시도하지는 않았다. 감사합니다. – KyleM

+0

@KyleM - ''을 변경할 필요가 없다고 생각합니다. , 단지'' –

0

당신 키로 봤어 당신이하고있는 것처럼 보이는 xpath가 아닌 어떤 노드와 일치하는지 알면됩니다.

+0

당신은 ... 정확히 무엇을 시도 했습니까? –