2016-10-10 81 views
3

我想用值變量(數組)檢查當前值。 不知怎的,我需要在if測試中的另一個循環。XSL 1.0用當前值檢查變量字符串

我的目標是從sourceXml語言與testLanguages.xml

sourceXML

<?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[@[email protected]]"> 
     Only DE and EN should be here 
    </xsl:if> 
    </xsl:for-each> 

    </xsl:template> 

</xsl:stylesheet> 

回答

1

解決XSLT 1.0 [無任何<xsl:key> -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> 

摘要

你的一些模式匹配錯了的孩子。輸出可能與您的實際預期輸出不同。