2015-01-21 2 views
0

for-each 덕분에 일련의 노드를 통과하려고합니다.이 노드의 매개 변수가 거의 조건을 확인하지 않으면 변수에서 현재 노드를 선택하고 싶습니다. 문제는 실제 노드 자체가 아니라 노드에서 값을 선택하는 것 같습니다. 그리고 나중에이 변수를 노드 집합으로 사용할 수 있기를 바랍니다.XSL : 현재 노드를 선택하십시오.

XML ($ parameterFile) :

<?xml version="1.0" encoding="UTF-8"?> 
    <Cases> 
      <Case> 
       <Rule LineNumber="10" PartNumber="FT40X40"/> 
       <Template> 
        <Drawings> 
         test 
        </Drawings> 
       </Template> 
      </Case> 
      <Case> 
       <Rule LineNumber="10" PartNumber="FT40X46k"/> 
       <Template> 
        <Drawings> 
test2 
        </Drawings> 
       </Template> 
      </Case> 

XSLT :

<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
exclude-result-prefixes="xs" 
version="2.0"> 
<xsl:variable name="GoodCase"> 
    <xsl:for-each select="$parameterFile/Cases/Case"> 
     <xsl:choose> 
       <xsl:when test="(Rule/@LineNumber = $markerNbLines) and 

(Rule/@PartNumber = $markerPartNumber)"> 
        <xsl:value-of select="current()"/> 
       </xsl:when> 
      </xsl:choose> 
     </xsl:for-each> 
    </xsl:variable> 

    <xsl:for-each select="$parameterFile/$GoodCase/Template/Drawings"> 
     test 
    </xsl:for-each> 

출력이 예상 :

test 

감사합니다!

+1

[** 완전한 XSLT 스타일 시트, 올바른 형식의 XML **] (http://stackoverflow.com/help/mcve) 및 예상 출력 - XML ​​또는 텍스트 포함 - 설명이 아닙니다. –

+0

스타일 시트가 버전 2.0을 선언하는 동안 질문에 XSLT 1.0 태그가 붙은 이유는 무엇입니까? –

답변

0

PB에 [문제?]는 실제 노드 자체가 아니라 노드의 값을 선택하는 것 같습니다.

글쎄, 당신은 있습니다 사용 :

<xsl:value-of select="current()"/> 

은 그래서에만 예상됩니다. <xsl:copy-of>을 사용하여 전체 노드를 작성할 수 있습니다. 나는 노드 집합 이후로이 변수를 사용할 수 있도록하고 싶습니다

그리고 : 그래서 만약 그러나, 결과 변수는 결과-나무 조각 아닌 노드 집합를 개최한다.

(어떤 테스트 부분 코드를 할 수 없기 때문에, 검증되지 않은)이 방식으로 변수를 채우는 오프 더 나은 것 : 따라서이다

<xsl:variable name="GoodCase" select="$parameterFile/Cases/Case[Rule/@LineNumber=$markerNbLines and Rule/@PartNumber=$markerPartNumber]"/> 

이 저장 원래 노드에 대한 참조 만하고 노드 집합 자체.

관련 문제