2016-09-20 56 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

你提供的例子像一個魅力工作,謝謝。 – user1854326