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

変数を使用する必要はないと思います。このようなことができます。fill と言ったときに、残りの 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 に答える