2011-08-10 5 views
4

동적으로 사용하는 방법을 찾는 XML 파일이 있습니다. 우리가있어 각 부분에 대한XSLT 필드 이름 연결 + 동적 변수 이름 액세스를위한 매개 변수 값

<part> 
<...> 
<fldMinPriceUSD>100.00</fldMinPriceUSD> 
<fldMaxPriceUSD>110.00</fldMaxPriceUSD> 
<fldMinPriceCAD>120.00</fldMinPriceCAD> 
<fldMaxPriceCAD>130.00</fldMaxPriceCAD> 
</part> 

, 우리는 매개 변수를 통해 전송 된 통화에 따라 부품 가격을 잡기 위해 그것에 XSLT를 사용하려면 :

기본이이다. 우리는 템플릿을 변경하지 않고 통화 목록 (EUR, GBP 등)을 키울 수 있기 때문에 if-elses를 사용하고 싶지 않습니다.

그래서 우리는 $dealerCurrency 매개 변수 (USD, CAD 등)를 사용하여 fldMinPrice와 연결하여 해당 값을 가져 오려고합니다. 이런 종류의 일도 가능합니까? 여러 가지 시도를했지만 아무 것도 작동하지 않는 것 같습니다.

<xsl:value-of select="format-number(str[@name=concat('fldMinPrice', $dealerCurrency)], '#.00')"/> 

이 작동하지 않는 것 : 내가 지금까지 시도했습니다 무엇

이있다. 어떤 제안?

답변

3

거의 다 왔어. 지금이 순간, str을@name를 사용하여 당신이 요소를 찾고은 STR 속성이 'fldMinPriceUSD'의 값으로 이름을 전화가했다. 필요한 것은 local-name() 기능이며 모든 노드와 일치시키기 위해 node()과 함께 사용해야합니다.

<xsl:value-of select="format-number(node()[local-name()=concat('fldMinPrice', $dealerCurrency)], '#.00')"/> 

즉 'fldMinPrice'의 이름 (네임 스페이스 제외) + 통화 코드와 일치하는 모든 노드와 일치합니다.

+0

예, 실제로 예를 들어 찾고 있습니다. ''는 포맷하기를 원하는 노드가 아닙니다. +1 –

0

너희들은 천재 야. 그래서 원래 평가에서 약간 잘못되었습니다. 우리의 실제 XML은 (I 메모리에서 다른 부분에 입력했다 ... 나는 어딘가에 일부 메모리가 손상되어 있어야합니다 ... 꼭 그 대체 취득) 다음과 같습니다 : 그래서

<double name="fldMaxPrice">20.0</double> 
<double name="fldMaxPriceCAD">19.0</double> 
<double name="fldMinPrice">18.0</double> 
<double name="fldMinPriceCAD">17.1</double> 

, 팀 C ... 당신의 대답은 완벽했습니다 ... XML의 다른 부분에 대해서도 똑같은 일을하려고했습니다. empo, 내가 실제로 찾고 있었던 것에 대한 당신의 본보기는 원래의 글이 정확하다는 것을 알아 채는데 도움이되었다. 단, 내가 더블을 가져야 만하는 str이 있다는 것을 제외하고는. str을 double과 voila로 변경했습니다!

저는 여러분에게 맥주를 빚지고 있습니다. (공유하지 않으려는 경우가 아니라면, 나는 당신에게 각각을 줄 것입니다.) :) 감사!