2014-01-28 3 views
0

에서 노드의 속성 값을 가져옵니다 내가 XSL에서이XPath는

<menu> 
    <sport id="1580" name="Foo" /> 
    <sport id="1581" name="Bar" /> 
    ... 

, 내가 id 속성을 통해 적절한 <sport> 노드를 선택하고 name 속성을 인쇄 할 필요가처럼 보이는 XML 데이터 구조를 가지고있다. 나는이 표현 잘 작동

{document('foo.xml')/menu/sport[@id = $id] 

를 통해 노드를 선택하고있어,하지만 같은 요소에 name 속성을 얻을 방법을 알아낼 수 없습니다. 수행 중

{document('odkazy.xml')/menu/sport[@id = $id]/@name 

이 작동하지 않습니다.

+0

"작동하지 않음"이란 무엇을 의미합니까? –

+0

xsl : value-of을 사용하여 출력하고 파서가 "error : invalid expression"을 발생시킵니다 – Ozrix

+3

왜 중괄호로 표현식을 시작하나요? 더 많은 XSLT 코드를 보여주세요. 어떤 XSLT 버전을 사용합니까? –

답변

2

이 XPath 표현식의 시작 부분에 후행 중괄호를 제거 작동하지 않을 이유를 볼 수

<xsl:for-each select="document('odkazy.xml')/menu/sport[@id = $id]"> 
<xsl:value-of select ="@name"/> 
</xsl:for-each/> 

모든 말도 할 수 있음. 또한, XSLT에서 사용할 수있는

<xsl:value-of select="{document('odkazy.xml')/menu/sport[@id = $id]/@name"/> 

<xsl:value-of select="document('odkazy.xml')/menu/sport[@id = $id]/@name"/> 


중괄호를 변경합니다. 그러나 그들은 속성 값 템플릿을 표시 :

<element name="{document('odkazy.xml')/menu/sport[@id = $id]/@name}"/> 

This은 속성 값 템플릿을 설명 XSLT 규격의 관련 부분이다.

0

올바른 스포츠를 설정하기 위해 id 또는 심지어 for-each에 변수를 설정할 수 있습니까? 그런 다음 이름을 출력하십시오.

<xsl:variable name="sportName" select="document('odkazy.xml')/menu/sport[@id = $id]" /> 
<xsl:value-of select ="$sportName/@name"/> 

아래에서 얼마나 잘 작동할지는 모르지만 시도해 볼만한 가치가 있는지 궁금하십니까? 난 정말

<xsl:value-of select="document('odkazy.xml')/menu/sport[@id = $id]/@name"/> 

+0

혼란스럽게 죄송합니다. select 속성에 중괄호를 사용했습니다. – Ozrix

+1

이 답변은 오류의 원인을 가리 키지 않습니다. 변수는 for-each와 동일하게 작동하지만 문제는 아닙니다. –

+0

제 제안의 마지막 줄에는 질문에 대한 답변이 나와 있습니다. 나는 그것이 작동하지 않는 이유를 볼 수 없다고 말했지만, 나는 그저 {내가 깨닫지도 못한 채로 내 마음 속에서 삭제했다! –