[英]How to match a xml value in compare with XSLT variable
我正在嘗試將xml值與xslt變量集進行比較,但輸出為空
這是我的xslt文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- New document created with EditiX at Thu Feb 18 19:08:23 IST 2016 -->
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="MI_GROUP"/>
<xsl:template match="/">
<xsl:variable name="A_Div_Code" select="'47,48,49,50'"/>
<xsl:variable name="A_Dept_Code" select="'KT,VT,SF,MQ'"/>
<xsl:variable name="A_Job_Level" select="'4B,2B,7B'"/>
<xsl:variable name="D_Div_Code" select="'70,65,42,12,76,31,47,48,49,50'"/>
<xsl:variable name="D_Dept_Code" select="'LM,MX,PQ,ML,KL,KO,KT,VT,SF,MQ'"/>
<xsl:variable name="D_Job_Level" select="'4D,2D,3D,4C,2C,7C,4B,2B,7B'"/>
<xsl:variable name="C_Div_Code" select="'12,76,31,47,48,49,50'"/>
<xsl:variable name="C_Dept_Code" select="'ML,KL,KO,KT,VT,SF,MQ'"/>
<xsl:variable name="C_Job_Level" select="'4C,2C,7C,4B,2B,7B'"/>
<xsl:for-each
select="COMPANY/EMPLOYEE" >
<xsl:variable name="DIVISION_CODE" select="'DIVISION_CODE'"/>
<xsl:variable name="DEPT_CODE" select="'DEPT_CODE'"/>
<xsl:variable name="JOB_LEVEL" select="'JOB_LEVEL'"/>
<xsl:choose>
<xsl:when test="contains($A_Div_Code, $DIVISION_CODE) and contains($A_Dept_Code, $DEPT_CODE) and contains($A_Job_Level, $JOB_LEVEL)">
<xsl:variable name="MI_GROUP" select="'A'" />
</xsl:when>
<xsl:when test="contains($C_Div_Code, $DIVISION_CODE) and contains($C_Dept_Code, $DEPT_CODE) and contains($C_Job_Level, $JOB_LEVEL)">
<xsl:variable name="MI_GROUP" select="'A,C'" />
</xsl:when>
<xsl:when test="contains($D_Div_Code, $DIVISION_CODE) and contains($D_Dept_Code, $DEPT_CODE) and contains($D_Job_Level, $JOB_LEVEL)">
<xsl:variable name="MI_GROUP" select="'A,C,D'" />
</xsl:when>
<xsl:otherwise>
<xsl:variable name="MI_GROUP" select="'A,C,D,Z'" />
</xsl:otherwise>
</xsl:choose>
<tr>
<th><xsl:value-of select="NAME"/></th><th><xsl:value-of select="$MI_GROUP"/></th>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
而employeedetails.xml
如下
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="employee-detailcheck.xsl"?>
<COMPANY>
<EMPLOYEE>
<DIVISION_CODE>47</DIVISION_CODE>
<DEPT_CODE>KT</DEPT_CODE>
<JOB_LEVEL>4B</JOB_LEVEL>
<NAME>Vikram</NAME>
</EMPLOYEE>
<EMPLOYEE>
<DIVISION_CODE>70</DIVISION_CODE>
<DEPT_CODE>LM</DEPT_CODE>
<JOB_LEVEL>4D</JOB_LEVEL>
<NAME>VISHWAS</NAME>
</EMPLOYEE>
<EMPLOYEE>
<DIVISION_CODE>47</DIVISION_CODE>
<DEPT_CODE>KT</DEPT_CODE>
<JOB_LEVEL>4B</JOB_LEVEL>
<NAME>Radzie</NAME>
</EMPLOYEE>
<EMPLOYEE>
<DIVISION_CODE>12</DIVISION_CODE>
<DEPT_CODE>ML</DEPT_CODE>
<JOB_LEVEL>4C</JOB_LEVEL>
<NAME>Vishnu</NAME>
</EMPLOYEE>
</COMPANY>
誰能讓我知道為什么$MI_GROUP
變量顯示為empty。
謝謝
因為它使用xsl:output
之后定義的變量$MI_GROUP
,而不是<xsl:choose>
內部定義的變量之一。
要獲得輸出,您需要定義
<xsl:variable name="MI_GROUP">
<xsl:choose>
<xsl:when test="contains($A_Div_Code, $DIVISION_CODE) and contains($A_Dept_Code, $DEPT_CODE) and contains($A_Job_Level, $JOB_LEVEL)">
<xsl:value-of select="'A'" />
</xsl:when>
... other cases...
<xsl:otherwise>
<xsl:value-of select="'A,C,D,Z'" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<tr>
<th><xsl:value-of select="NAME"/></th><th><xsl:value-of select="$MI_GROUP"/></th>
</tr>
在這里可以找到兩個問題:
您試圖顯示該變量的值,但是它超出了聲明該變量的范圍。
您不正確地嘗試檢索文本內容。 代替<xsl:variable name="DIVISION_CODE" select="'DIVISION_CODE'"/>
,您需要使用類似<xsl:variable name="DIVISION_CODE" select="DIVISION_CODE/text()"/>
。 在初始代碼中,您僅將變量設置為DIVISION_CODE字符串。
重構這種方式應該起作用:
<?xml version="1.0" encoding="UTF-8"?>
<!-- New document created with EditiX at Thu Feb 18 19:08:23 IST 2016 -->
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="MI_GROUP"/>
<xsl:template match="/">
<xsl:variable name="DIVISION_CODE" select="DIVISION_CODE/text()"/>
<xsl:variable name="DEPT_CODE" select="DEPT_CODE/text()"/>
<xsl:variable name="JOB_LEVEL" select="JOB_LEVEL/text()"/>
<xsl:variable name="D_Div_Code" select="'70,65,42,12,76,31,47,48,49,50'"/>
<xsl:variable name="D_Dept_Code" select="'LM,MX,PQ,ML,KL,KO,KT,VT,SF,MQ'"/>
<xsl:variable name="D_Job_Level" select="'4D,2D,3D,4C,2C,7C,4B,2B,7B'"/>
<xsl:variable name="C_Div_Code" select="'12,76,31,47,48,49,50'"/>
<xsl:variable name="C_Dept_Code" select="'ML,KL,KO,KT,VT,SF,MQ'"/>
<xsl:variable name="C_Job_Level" select="'4C,2C,7C,4B,2B,7B'"/>
<xsl:for-each
select="COMPANY/EMPLOYEE" >
<xsl:variable name="DIVISION_CODE" select="'DIVISION_CODE'"/>
<xsl:variable name="DEPT_CODE" select="'DEPT_CODE'"/>
<xsl:variable name="JOB_LEVEL" select="'JOB_LEVEL'"/>
<xsl:variable name="MI_GROUP">
<xsl:choose>
<xsl:when test="contains($A_Div_Code, $DIVISION_CODE) and contains($A_Dept_Code, $DEPT_CODE) and contains($A_Job_Level, $JOB_LEVEL)">
<xsl:text>A</xsl:text>
</xsl:when>
<xsl:when test="contains($C_Div_Code, $DIVISION_CODE) and contains($C_Dept_Code, $DEPT_CODE) and contains($C_Job_Level, $JOB_LEVEL)">
<xsl:text>A,C</xsl:text>
</xsl:when>
<xsl:when test="contains($D_Div_Code, $DIVISION_CODE) and contains($D_Dept_Code, $DEPT_CODE) and contains($D_Job_Level, $JOB_LEVEL)">
<xsl:text>A,C,D</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>A,C,D,Z</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<tr>
<th><xsl:value-of select="NAME"/></th><th><xsl:value-of select="$MI_GROUP"/></th>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.