【问题标题】:How to insert a variable into an xslt document function如何将变量插入 xslt 文档函数
【发布时间】:2012-05-02 19:37:05
【问题描述】:

好的,对不起。我有这两个 xml 文件。 ProvlaLingua1.xml

<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 valor,然后从 ProvaLingua2 中提取 valor。 我需要类似的东西

<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>

因为否则我需要为任何语言编写太多行。 感谢您的帮助

【问题讨论】:

  • 考虑发布足够的信息让我们重现问题。您的第一个带有document(ProvaLingua1.xml) 的示例需要为document('ProvaLingua1.xml'),因此很难判断剩余的代码。您当然可以像在document('ProvaLingua2.xml')/MYFILE/*[name()=$lingua]/TAG2 中那样在 XPath 表达式中使用变量,以帮助我们帮助您为什么找不到您要查找的节点,我们需要查看相关文档示例。
  • 这两个答案是否解决了您的问题?请善意并将它们标记为已回答:stackoverflow.com/faq#howtoask

标签: xml xslt variables document


【解决方案1】:
  document('ProvaLingua2.xml')/LINGUA/*[name()=$language]/TAG1" /><br />

【讨论】:

    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多