2011-04-12 5 views
4

동일한 Name = 'UPC'를 가진 노드가 여러 개 있습니다. 현재 노드의 값을 찾아야합니다.xpath 현재 노드의 값을 찾습니다.

<XML> 
<Attribute> 
     <Name>UPC</Name> 
     <Type>ComplexAttr</Type> 
     <Value>Testing</Value> 
    </Attribute> 
    <Attribute> 
     <Name>UPC</Name> 
     <Type>ComplexAttr</Type> 
     <Value>24a</Value> 
    </Attribute> 
</XML> 

예상 출력 : 그것은에서/속성/값 어디 이름 = 'UPC'및 유형 = 'ComplexAttr'값을 끌어해야한다. 첫 번째 실행에

은 = '테스트'제 2 회 실행에 & 값이 나는 다음과 같은 코드를 사용하려고 해요하지만이 작동하지 않습니다 = '24A'

해야한다. 값은 null입니다.

<xsl:attribute name ="value"> 
    <xsl:value-of select =".//Attribute[Type='ComplexAttr' and Name = 'UPC'][$i]/Value" /> 
</xsl:attribute> 

$ 내가 내가 위의 XML을 통해 루프를 사용하고 변수이며 각 실행 후 증가. 그러나 모든 실행에서 동일한 값 '테스트'(첫 번째 값임) 만 제공합니다. 변수의 값을 확인했습니다. 그것은 반복 할 때마다 변하고 있습니다.

나는 current()와 position()을 아래처럼 사용하려고 시도했지만,이 경우 null이 될 것이다.

<xsl:value-of select =".//Attribute[Type='ComplexAttr' and Name = 'UPC'][current()]/Value" /> 

<xsl:value-of select =".//Attribute[Type='ComplexAttr' and Name = 'UPC'][position() = $i]/Value" /> 

누군가 나를 도와 줄 수 있습니까? 미리 감사드립니다.

+0

이 XML 샘플의 예상 출력은 얼마입니까? –

+0

@Alejandro. 위의 예상 출력을 추가했습니다. 감사합니다 – JohnXsl

+0

좋은 질문, +1. 설명 및 신속하고 한 줄짜리 XPath 표현 솔루션에 대한 내 대답을 참조하십시오. –

답변

4

이 가장 큰 자주 묻는 질문 중 하나입니다

[] 운영자가 // 약어보다 더 강한 결합한다. XML 문서에서 2 요소를 선택하기 위해

(//Attribute[Type='ComplexAttr' and Name = 'UPC'])[1]/Value 

을 그 : 술어에서 특정 조건을 만족하는 XML 문서의 첫 번째 요소를 선택하기 위해

,를 사용 술어의 특정 조건이을 사용하여 만족시키는

(//Attribute[Type='ComplexAttr' and Name = 'UPC'])[2]/Value 

을 위해서는 $i 번째 ELE를 선택 XML 문서의 특정 조건을 만족하는 XML 문서의 경우 :

(//Attribute[Type='ComplexAttr' and Name = 'UPC'])[position() = $i]/Value 
+0

당신의 도움에 감사드립니다. 그것은 매력처럼 작동합니다 ...-). 나는 당신의 대답을 받아 들일 것이고 설명을 위해서 +1 할 것입니다. 나 같은 XSLT의 초보자에게는 매우 중요합니다. :-) – JohnXsl

+0

@JohnXsl : 당신은 환영합니다 :) –

2

XPath 식에서 변수를 사용할 수 없습니다. 수동으로 상수를 사용하여 시도하고 당신은 작동하는지 볼 수 있습니다 : 일반적으로

<xsl:value-of select=".//Attribute[Type='ComplexAttr' and Name='UPC'][2]/Value" /> 

을, 당신이 정말로 구문이 허용에도 불구하고, XSLT에서 루프를 작성하지 않습니다. 특정 시점에서 특정 컨텍스트로 호출되는 템플릿을 작성합니다. 전반적인 프로그램의 컨텍스트에 대해 더 많이 알지 못한다면 다음 단계가 무엇인지 잘 모릅니다.

+0

답변 해 주셔서 감사합니다. 당신이 올바른지.상수가 출력을 제공하기 때문에 기술적으로 변수가 동일해야합니다. 그래서 내가 변수를 사용하려고했습니다. XSLT를 처음 접했고 시간 제약으로 인해 XSLT에 많은 시간을 할애 할 수 없었습니다. 재귀 적으로 시도했지만 작동하지 않습니다. 그래서 나는 반복으로 전환했다. 당신이 원한다면 내 이전 게시물을 볼 수 있습니다 http://stackoverflow.com/questions/5638460/xslt-grouping-recursive-problem-part-2. 내 문제를 해결하는 방법에 대한 의견이나 아이디어가 있으면 알려주십시오. 감사합니다 – JohnXsl

관련 문제