2016-09-20 10 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'の代わりに)、' 'xsl:value-of-select =" key( 'table-lookup'、$ curr_key、$ LookupDoc)/ @ ColumnName "/>それがうまくいかなければ、あなたの質問を編集し、 'テンプレート 'match =" measCollecFile/measData "または別のテンプレートで発生するかどうかは不明です。 –

+0

あなたが提供したifの例は、魅力的に働いてくれました。ありがとうございます。 – user1854326