2010-05-10 69 views
1

有人能告訴我下面的XSLT轉換有什麼問題嗎?我已將其剝離到最低限度。XSLT參數未被替換

基本上,我想有一個參數「標題」替換,但我不能讓它運行。轉換隻是忽略參數。我用一些感嘆號強調了相關的部分。

任何意見,不勝感激。

public class Test { 
    private static String xslt = 
      "<?xml version=\"1.0\"?>\n" + 
      "<xsl:stylesheet\n" + 
      "  xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n" + 
      "  version=\"1.0\">\n" + 
      " <xsl:param name=\"title\" />\n" + 
      " <xsl:template match=\"/Foo\">\n" + 
      "  <html><head><title>{$title}</title></head></html>\n" + // !!!!!!!!!!! 
      " </xsl:template>\n" + 
      "</xsl:stylesheet>\n"; 

    public static void main(String[] args) { 

     try { 
      final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      dbf.setNamespaceAware(true); 
      final DocumentBuilder db = dbf.newDocumentBuilder(); 
      final Document document = db.newDocument(); 
      document.appendChild(document.createElement("Foo")); 

      final StringWriter resultWriter = new StringWriter(); 
      TransformerFactory factory = TransformerFactory.newInstance(); 
      Transformer transformer = factory.newTransformer(new StreamSource(new StringReader(xslt))); 
      // !!!!!!!!!!!!!!!!!! 
      transformer.setParameter("title", "This is a title"); 
      // !!!!!!!!!!!!!!!!!! 
      transformer.transform(new DOMSource(document), new StreamResult(resultWriter)); 

      System.out.println(resultWriter.toString()); 
     } catch(Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

我使用的是沒有任何工廠特定系統屬性集的Java 6。

預先感謝您!

+0

NB:的的工作原理,但我想使用較短的{ $ title}語法來使用這些變量,例如在內聯CSS定義中。 – digitalbreed 2010-05-10 15:49:52

+0

好問題(+1)。查看我的答案以獲得解釋和完整解決方案。 :) – 2010-05-10 16:16:29

回答

2
<html><head><title>{$title}</title></head></html> 

的問題是在上述線。

在XSLT中,{someXPathExpression}語法只能用於(某些)屬性,而不能用於文本節點。

替換上面:

<html><head><title><xsl:value-of select="$title"/></title></head></html> 
+0

感謝您的回覆。我將如何進行,如果我想嘗試類似的東西: /images/foobar.png」 /> 感謝 – digitalbreed 2010-05-10 16:45:42

+1

@digitalbreed:' /images/foobar.png' – 2010-05-10 17:03:19

+1

如前所述,'{括號語法}'在某些屬性中是允許的.XSLT規範定義了這些屬性的含義:屬性值模板,參見http://www.w3.org/TR/xslt#attribute-value-templates – 2010-05-10 22:03:53