2

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

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

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

现在我想使用例如这个逻辑来填充 MainValue

如果 CategoryLevel1Desc = 123 和 CategoryLevel2Desc = 456 -> 设置 MainValue = ABC 如果 CategoryLevel1Desc = 123 和 CategoryLevel2Desc = 999 -> 设置 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>

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

提前致谢。

亲切的问候斯特凡

4

1 回答 1

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>
于 2013-11-05T19:07:24.973 回答