我有2个不同的XML
1 XML
<address>
<localityType>CityType</localityType>
<locality>CityName</locality>
</address>
2 XML
<address>
<localityType>TownType</localityType>
<locality>TownName</locality>
</address>
我有一个XSLT样式表
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<head>
<title>Address</title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td>City</td>
<td>
<xsl:variable name="loc" select="//localityType" />
<xsl:if test="$loc = 'CityType'">
<xsl:value-of select="//locality" />
</xsl:if>
</td>
</tr>
<tr>
<td>Town</td>
<td>
<xsl:variable name="loc" select="//localityType" />
<xsl:if test="$loc != 'CityType'">
<xsl:value-of select="//locality" />
</xsl:if>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
结果我想得到下表中的第一个XML
作为第二个XML的结果 - 下表
我的问题是因为我的 xsl:if 语句,我没有得到这个表。也许我用错了
答案 0 :(得分:1)
下面的样式表会生成相同的HTML输出,而不使用xsl:variable
或//
轴。这些构造在XSLT中可用的事实并不意味着您应该在任何情况下使用它们。
何时使用xsl:variable
您应该使用变量
您对xsl:variable
的使用既不属于这两个类别:表达式很简单,元素localityType
在上下文中很容易获得,而您以后不需要结果。
何时使用//
(后代或自我::轴)
仅当您使用此表达式导航的结构不静态已知时,才应使用//
。在您的情况下,输入XML的结构并不完全深入并且事先已知。您的模板匹配适用于/
,您知道localityType
元素的完整路径:"address/localityType"
。
使用xsl:if
是一个好主意。
<强>样式表强>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/address">
<html>
<head>
<title>Address</title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td>City</td>
<td>
<xsl:if test="localityType = 'CityType'">
<xsl:value-of select="locality"/>
</xsl:if>
</td>
</tr>
<tr>
<td>Town</td>
<td>
<xsl:if test="localityType = 'TownType'">
<xsl:value-of select="locality"/>
</xsl:if>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
假设以下输入XML:
<address>
<localityType>CityType</localityType>
<locality>CityName</locality>
</address>
HTML输出
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Address</title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td>City</td>
<td>CityName</td>
</tr>
<tr>
<td>Town</td>
<td></td>
</tr>
</table>
</body>
</html>
呈现HTML