2015-05-25 52 views
3

我正在使用java程序執行XSLT轉換。下面給出的是用於轉換的代碼塊。 這裏我創建一個hashmap並設置需要在XSLT中訪問的值。檢索XSLT中的hashmap值

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程序我能夠獲得可變addressData的值如果我通過如「101」(參照所述students.xml)硬編碼的密鑰。但是,如果我遍歷數組,然後傳遞rollnumber作爲keyData address變量中的值爲空。

我不知道爲什麼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> 

任何人都可以解釋爲什麼會在地圖:GET方法將採取硬編碼的輸入,但不是一個變量?

+0

嘗試'map:get($ mapData,string($ rollNumber))'而不是map:get($ mapData,$ rollNumber)。 –

回答

2

正如你defined- HashMap<String,String>()它的鍵和值必須String。而你傳入$rollNumbervariable類型上檢索數據。

<xsl:variable name="addressData" select="map:get($mapData,$rollNumber)"/> 

你必須傳遞之前,將它轉換成Stringvariable

<xsl:variable name="addressData" select="map:get($mapData,(String)$rollNumber)"/> 
+0

非常感謝。有效。只需要一點點改動(string)$ rollNumber而不是(String)$ rollNumber。 – vijaygopal

+0

@vijaygopal如果任何答案解決了您的問題,請將此標記爲答案,這樣可以對其他具有相同查詢的人有所幫助。並且「關閉」以避免頭頂上的問題如果您沒有權限這樣做,主持人可以做但您必須按照「StackOverFlow社區規則」將其標記爲已回答。 –

+0

我不確定如何標記爲已回答或關閉此問題。你能不能讓我知道該怎麼做才能遵守規則? – vijaygopal