我是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
答案 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>