2016-09-20 3 views
0

조회를 위해 사용할 XML 문서를 동적으로 결정하는 방법을 찾고 있습니다. 필자는 입력 XML 문서를 파싱하고 그 값에 기반하여 적절한 룩업 문서를 사용하고자한다. 이상적으로는 $ LookupDoc을 올바른 문서로 설정하여 읽을 수 있습니다. 아래에있는 코드 스 니펫이 작동하지 않습니다. XSLT 3.0으로 전환하면 쉽게 사용할 수 있습니다. 당신은라는 변수의 사용을 표시하지 않은동적 문서 조회

<?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" version="2.0"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:key name="table-lookup" match="Row" use="@Key1"/> 
    <xsl:variable name="LookupLTE" select="document('HuaweiLTE.xml')/Huawei"/> 
    <xsl:variable name="LookupHSPA" select="document('HuaweiHSPA.xml')/Huawei"/> 
    <xsl:template match="measCollecFile/measData"> 
     <xsl:variable name="DeviceName" select="@userLabel"/> 
     <xsl:choose> 
      <xsl:when test="substring($DeviceName,1,1)='L'"> 
       <xsl:variable name="LookupDoc" select="$LookupLTE"/> 
      </xsl:when> 
      <xsl:when test="substring($DeviceName,1,1)='H'"> 
       <xsl:variable name="LookupDoc" select="$LookupHSPA"/> 
      </xsl:when> 
     </xsl:choose> 
     <root> 
      <xsl:for-each select="measInfo"> 
       <xsl:call-template name="loop"> </xsl:call-template> 
      </xsl:for-each> 
     </root> 
    </xsl:template> 

답변

0

LookupDoc 당신은 정의 할 것 같다하지만 난 당신이 단순히 변수를 정의 할 수 <xsl:variable name="LookupDoc" select="if (substring($DeviceName,1,1)='L') then $LookupLTE else if (substring($DeviceName,1,1)='H') then $LookupHSPA else()"/>를 사용할 수 있다고 생각합니다.

+0

미안하지만 도움이 될 것 같습니다. – user1854326

+0

내가 제안한 것을 시도해보십시오 (현재'xsl : chooose' 대신에). 그것이 작동하지 않는다면 질문을 편집하고' '그 템플릿이'match = "measCollecFile/measData"'또는 다른 템플릿에서 발생하는지 확실하지 않기 때문입니다. –

+0

제공 한 if 예제가 매력처럼 작동했습니다. 감사합니다. – user1854326