【问题标题】:XSL 1.0 check variable string with current valueXSL 1.0 检查具有当前值的变量字符串
【发布时间】:2016-10-10 13:15:05
【问题描述】:

我想用值变量(数组)检查当前值。 不知何故,我在 if 测试中需要另一个循环。

我的目标是使用 testLanguages.xml 映射 sourceXml 中的语言

源XML

<?xml version="1.0" encoding="utf-8"?>
<a>
 <b lang="en"></b>
 <b lang="de"></b>
 <b lang="it"></b>
 <b lang="jp"></b>
</a>

testLanguages.xml

<?xml version="1.0" encoding="utf-8"?>
<languages>
<lang Key="de" Id="1031" />
<lang Key="en" Id="1033" />
</languages>

我当前的 XSL 不工作:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"        
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
  <xsl:strip-space elements="*" />

  <xsl:variable name="language" select="document('testLanguages.xml')/lang" />

  <xsl:template match="/">

  <xsl:template match="a">

  <xsl:for-each select="./b">
    <xsl:if test=".b[@lang=$language@Key]">
        Only DE and EN should be here
    </xsl:if>
  </xsl:for-each>

  </xsl:template>

</xsl:stylesheet>

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    解决方案 XSLT 1.0 [没有任何 &lt;xsl:key&gt;-Usage]

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"        
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
        <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
        <xsl:strip-space elements="*" />
    
        <xsl:variable name="language" select="document('testLanguages.xml')//lang" />
    
        <xsl:template match="a">
            <xsl:copy>
                <xsl:for-each select="b[@lang = $language/@Key]">
                    <xsl:copy>
                        <xsl:copy-of select="@* | $language[@Key = current()/@lang]/@*"/>
                    </xsl:copy>
                </xsl:for-each>
            </xsl:copy>
        </xsl:template>
    
    </xsl:stylesheet>
    

    输出

    <?xml version="1.0" encoding="UTF-8"?>
    <a>
       <b lang="en" Key="en" Id="1033"/>
       <b lang="de" Key="de" Id="1031"/>
    </a>
    

    总结

    您的某些模式匹配了错误的孩子。输出可能与您的实际预期输出不同。

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多