2012-05-02 14 views
0

ОК, извините. У меня есть два xml-файла. ProvlaLingua1.xmlКак вставить переменную в функцию документа xslt

<VENDOR> 
    <IMMAGINI_SITO>True</IMMAGINI_SITO> 
    <VERSIONE_SKYWALKER>1</VERSIONE_SKYWALKER> 
    <CDLINGUA>IT</CDLINGUA> 
</VENDOR> 

и это второй ProvaLingua2.xml

<LINGUA> 
      <EN> 
       <TAG1>The book is on the table</TAG1> 
       <TAG2>The cat is on the table</TAG2> 
      </EN> 
      <IT> 
       <TAG1>Il libro è sul tavolo</TAG1> 
       <TAG2>Finche la barca va lasciala andare</TAG2> 
      </IT> 
</LINGUA> 

так что мне нужно, чтобы проверить ProvaLingua1, чтобы получить доблесть CDLINGUA, а затем извлечь из доблестью ProvaLingua2. мне нужно что-то вроде

<xsl:variable name="LANGUAGE" select="document('ProvaLingua1.xml')VENDOR/CDLINGUA"/> 
<xsl:value-of select="document('ProvaLingua2.xml')/LINGUA/A VARIABLE HERE/TAG2" /> 

мне нужно поставить переменную «LANGUAGE», чтобы получить добычу, я не могу сделать это с:

<xsl:choose> 
    <xsl:when test="$language='IT'"> 

     <xsl:value-of select="document('ProvaLingua2.xml')/LINGUA/IT/TAG1" /><br /> 
     <xsl:value-of select="document('ProvaLingua.xml')/LINGUA/IT/TAG2" /><br /> 
    </xsl:when> 

</xsl:choose> 

, потому что в противном случае я должен был бы написать слишком много строк для любого языка. Спасибо за любую помощь

+0

Рассмотрите возможность размещения достаточно информации, позволяющей нам воспроизвести проблему. Ваш первый образец с 'document (ProvaLingua1.xml)' должен быть 'document ('ProvaLingua1.xml')', поэтому трудно судить о остальном коде. Вы можете использовать переменную в выражении XPath так, как вы делаете в документе («ProvaLingua2.xml»)/MYFILE/* [name() = $ lingua]/TAG2', чтобы мы могли помочь, почему это не находит узел, который вы ищете, нам нужно увидеть соответствующие образцы документов. –

+0

Был ли какой-либо из этих двух ответов решена ваша проблема? Пожалуйста, будьте любезны и отметьте их как ответ: http://stackoverflow.com/faq#howtoask. –

ответ

2

Я не могу определить проблему с тем, что вы имели в своем сообщении до редактирования, но на основе ваших образцов я покажу три способа решить, что, один с XSLT 1.0 или 2.0 без используя ключ, один для XSLT 1.0 и 2.0 с использованием ключа и один с XSLT 2.0 с помощью ключа:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0"> 

    <xsl:param name="url1" select="'test2012050202.xml'"/> 
    <xsl:param name="url2" select="'test2012050203.xml'"/> 

    <xsl:variable name="doc1" select="document($url1)"/> 
    <xsl:variable name="doc2" select="document($url2)"/> 

    <xsl:key name="tag-by-lang" match="TAG2" use="local-name(..)"/> 

    <xsl:template match="/"> 
    <xslt2> 
     <xsl:value-of select="key('tag-by-lang', $doc1/VENDOR/CDLINGUA, $doc2)"/> 
    </xslt2> 
    <xslt1> 
     <xsl:for-each select="$doc2"> 
     <xsl:value-of select="key('tag-by-lang', $doc1/VENDOR/CDLINGUA)"/> 
     </xsl:for-each> 
    </xslt1> 
    <without-key> 
     <xsl:value-of select="$doc2/LINGUA/*[local-name() = $doc1/VENDOR/CDLINGUA]/TAG2"/> 
    </without-key> 
    </xsl:template> 

</xsl:stylesheet> 
3
document('ProvaLingua2.xml')/LINGUA/*[name()=$language]/TAG1" /><br />