XSLT变量在表达式中设置和使用

时间:2013-11-05 18:35:10

标签: xml xslt

我是XSLT开发的新手,我遇到了一个问题,我不明白,我知道如何解决这个问题。

我有一个包含以下部分的xml文件:

<Category>
    <MainValue></MainValue>
    <Tree>
        <CategoryLevel1>
            <CategoryLevel1Desc>123</CategoryLevel1Desc>        
        </CategoryLevel1>
        <CategoryLevel2>
            <CategoryLevel2Desc>456</CategoryLevel2Desc>        
        </CategoryLevel2>
    </Tree>
</Category>

现在我想使用例如这个逻辑

来填充MainValue

如果CategoryLevel1Desc = 123且CategoryLevel2Desc = 456 - &gt;设置MainValue = ABC 如果CategoryLevel1Desc = 123且CategoryLevel2Desc = 999 - &gt;设置MainValue = DEF ....

我认为我必须为CategoryLevel1Desc和CategoryLevel2Desc创建一个变量:

 <xsl:variable name="VarCategoryLevel1Desc" >
     <xsl:template match="CategoryLevel1Desc"> 
       <xsl:value-of select="CategoryLevel1Desc"/>
     </xsl:template>  </xsl:variable>

 <xsl:variable name="VarCategoryLevel2Desc" >
     ...
 </xsl:variable>


 <xsl:template match="Category">
   <xsl:choose>
     <xsl:when test="$VarCategoryLevel1Desc='123'">     
       <MainValue>ABC</MainValue>
     </xsl:when>
     <xsl:otherwise>
       <MainValue>DEF</MainValue>
     </xsl:otherwise>
   </xsl:choose>
 </xsl:template>

你怎么猜我不知道如何解决它。我认为我的第一个问题是,如何填充我的变量以及如何使用它们。在某些情况下,choose表达式不知道变量和   谁能给我一个提示?

提前致谢。

亲切的问候Stefan

1 个答案:

答案 0 :(得分:3)

我认为你不需要使用变量。你可以这样做。我假设当你说填充时你想保留XML文档的其余部分吗?

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

<xsl:output method="xml" indent="yes"/>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="MainValue">
    <xsl:choose>
        <xsl:when test="following-sibling::Tree[CategoryLevel1/CategoryLevel1Desc = '123' and CategoryLevel2/CategoryLevel2Desc = '456']">     
            <MainValue>ABC</MainValue>
        </xsl:when>
        <xsl:otherwise>
            <MainValue>DEF</MainValue>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>   
</xsl:stylesheet>