在 XSLT 中检索哈希映射值
Retrieving hashmap values in XSLT
我正在使用 java 程序执行 XSLT 转换。下面给出的是用于转换的代码块。
我在这里创建一个散列图并设置一个需要在 XSLT 中访问的值。
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource xslStream = new StreamSource(inputXSL);
Transformer transformer = factory.newTransformer(xslStream);
Map<String,String> mapData = new HashMap<String,String>();
mapData.put("103", "188 E 6th Street");
transformer.setParameter("mapData", mapData);
进行转换的xslt代码(inputXSL)如下所示。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:map="xalan://java.util.Map"
extension-element-prefixes="map">
<xsl:param name="mapData"/>
<xsl:template match="/class">
<html>
<body>
<h3>Student Details</h3>
<table border="1">
<tr bgcolor="#E6E6FA">
<th>Roll Number</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
<th>Address</th>
</tr>
<xsl:for-each select="student">
<tr>
<xsl:variable name="rollNumber" select="./@rollno"/>
<xsl:variable name="addressData" select="map:get($mapData,$rollNumber)"/>
<td>
<xsl:value-of select="./@rollno" />
</td>
<td>
<xsl:value-of select="firstname" />
</td>
<td>
<xsl:value-of select="lastname" />
</td>
<td>
<xsl:value-of select="nickname" />
</td>
<td>
<xsl:value-of select="marks" />
</td>
<td>
<xsl:value-of select="$addressData" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
在上面的 xslt 程序中,如果我传递一个硬编码密钥,例如“101”(请参阅 students.xml),我可以获得变量 addressData 的值。但是,如果我遍历数组然后将 rollnumber 作为键传递,addressData 变量中的值为空。
我不确定为什么 map.:get 方法会接受硬编码值而不是参数。可能我遗漏了什么。
下面给出的是传递给 xslt 的数据xml。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="ParseResponse.xsl"?>
<class>
<student rollno="101">
<firstname>PPP</firstname>
<lastname>LLL</lastname>
<nickname>JJJ</nickname>
<marks>85</marks>
</student>
<student rollno="102">
<firstname>AAA</firstname>
<lastname>CCC</lastname>
<nickname>DDD</nickname>
<marks>95</marks>
</student>
<student rollno="103">
<firstname>KKK</firstname>
<lastname>LLL</lastname>
<nickname>WWW</nickname>
<marks>90</marks>
</student>
</class>
谁能解释为什么 map:get 方法会接受硬编码输入而不是变量?
如您所定义- HashMap<String,String>()
它的键和值必须是 String
。当您在检索数据时将 $rollNumber
作为 variable
类型传递。
<xsl:variable name="addressData" select="map:get($mapData,$rollNumber)"/>
你必须在通过之前将它从 variable
转换为 String
。
<xsl:variable name="addressData" select="map:get($mapData,(String)$rollNumber)"/>
我正在使用 java 程序执行 XSLT 转换。下面给出的是用于转换的代码块。 我在这里创建一个散列图并设置一个需要在 XSLT 中访问的值。
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource xslStream = new StreamSource(inputXSL);
Transformer transformer = factory.newTransformer(xslStream);
Map<String,String> mapData = new HashMap<String,String>();
mapData.put("103", "188 E 6th Street");
transformer.setParameter("mapData", mapData);
进行转换的xslt代码(inputXSL)如下所示。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:map="xalan://java.util.Map"
extension-element-prefixes="map">
<xsl:param name="mapData"/>
<xsl:template match="/class">
<html>
<body>
<h3>Student Details</h3>
<table border="1">
<tr bgcolor="#E6E6FA">
<th>Roll Number</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
<th>Address</th>
</tr>
<xsl:for-each select="student">
<tr>
<xsl:variable name="rollNumber" select="./@rollno"/>
<xsl:variable name="addressData" select="map:get($mapData,$rollNumber)"/>
<td>
<xsl:value-of select="./@rollno" />
</td>
<td>
<xsl:value-of select="firstname" />
</td>
<td>
<xsl:value-of select="lastname" />
</td>
<td>
<xsl:value-of select="nickname" />
</td>
<td>
<xsl:value-of select="marks" />
</td>
<td>
<xsl:value-of select="$addressData" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
在上面的 xslt 程序中,如果我传递一个硬编码密钥,例如“101”(请参阅 students.xml),我可以获得变量 addressData 的值。但是,如果我遍历数组然后将 rollnumber 作为键传递,addressData 变量中的值为空。
我不确定为什么 map.:get 方法会接受硬编码值而不是参数。可能我遗漏了什么。
下面给出的是传递给 xslt 的数据xml。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="ParseResponse.xsl"?>
<class>
<student rollno="101">
<firstname>PPP</firstname>
<lastname>LLL</lastname>
<nickname>JJJ</nickname>
<marks>85</marks>
</student>
<student rollno="102">
<firstname>AAA</firstname>
<lastname>CCC</lastname>
<nickname>DDD</nickname>
<marks>95</marks>
</student>
<student rollno="103">
<firstname>KKK</firstname>
<lastname>LLL</lastname>
<nickname>WWW</nickname>
<marks>90</marks>
</student>
</class>
谁能解释为什么 map:get 方法会接受硬编码输入而不是变量?
如您所定义- HashMap<String,String>()
它的键和值必须是 String
。当您在检索数据时将 $rollNumber
作为 variable
类型传递。
<xsl:variable name="addressData" select="map:get($mapData,$rollNumber)"/>
你必须在通过之前将它从 variable
转换为 String
。
<xsl:variable name="addressData" select="map:get($mapData,(String)$rollNumber)"/>