2013-03-02 64 views
-2

我有這樣的XML文件解析在PHP變量XSLT中使用的setParameter

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="test.xsl"?> 

<bookstore> 

<book category="COOKING"> 
    <title lang="en">Everyday Italian</title> 
    <author>Giada De Laurentiis</author> 
    <year>2005</year> 
    <price>30.00</price> 
</book> 

<book category="CHILDREN"> 
    <title lang="en">Harry Potter</title> 
    <author>J K. Rowling</author> 
    <year>2005</year> 
    <price>29.99</price> 
</book> 

<book category="WEB"> 
    <title lang="en">XQuery Kick Start</title> 
    <author>James McGovern</author> 
    <author>Per Bothner</author> 
    <author>Kurt Cagle</author> 
    <author>James Linn</author> 
    <author>Vaidyanathan Nagarajan</author> 
    <year>2003</year> 
    <price>49.99</price> 
</book> 

<book category="WEB"> 
    <title lang="en">Learning XML</title> 
    <author>Erik T. Ray</author> 
    <year>2003</year> 
    <price>39.95</price> 
</book> 

</bookstore> 

我有這個PHP代碼

<?php 
$xslDoc = new DOMDocument(); 
$xslDoc->load("test.xsl"); 

$xmlDoc = new DOMDocument(); 
$xmlDoc->load("test.xml"); 

$xsltProcessor = new XSLTProcessor(); 
$xsltProcessor->registerPHPFunctions(); 
$xsltProcessor->importStyleSheet($xslDoc); 
$xsltProcessor->setParameter('','s_name', 'title'); 
$xsltProcessor->setParameter('','s_value', 35); 

echo $xsltProcessor->transformToXML($xmlDoc); 
?> 

,這是我的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" xmlns:str="http://exslt.org/strings" exclude-result-prefixes="str"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <table border="1"> 
    <tr bgcolor="#9acd32"> 
     <th>O/p</th> 
    </tr> 
    <xsl:for-each select="/bookstore/book[price>$s_value]/$s_name"> 
    <tr> 
     <td><xsl:value-of select="."/></td> 
    </tr> 
    </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

在這裏我要發送到我的xsl轉換的一些參數。這是s_names_value

這是給我的錯誤

如果我只用s_value然後正常工作ñXSL將

<xsl:for-each select="/bookstore/book[price>$s_value]/title"> 

如果我同時使用則其不工作

+0

你不能把變量放在路徑中。把一個路徑放到我認爲可行的整個變量中。 – hakre 2013-03-02 10:54:32

+0

@hakre如果我使用'$ s_value',那麼它的工作... – 2013-03-02 10:57:40

+0

是的,因爲它是一個有效的xpath變量,另一個不是因爲放置在路徑中。如果有幫助,你可以嘗試比較本地名稱。 – hakre 2013-03-02 10:58:19

回答

2

這是無效的XPath:

/bookstore/book[price>$s_value]/$s_name 

,因爲變量不能像這樣的斜線後出現。爲了完成你想要做的事情,試試這個:

/bookstore/book[price>$s_value]/*[local-name() = $s_name] 
+0

我得到了輸出,但有警告:Warning:XSLTProcessor :: importStylesheet()[xsltprocessor.importstylesheet]:編譯錯誤:file file:/// C:/ xampp/htdocs/magento/menu_xml/test3 /第10行中的C:\ xampp \ htdocs \ magento \ menu_xml \ test3 \ index.php中的test.xsl第1行元素樣式表和警告:XSLTProcessor :: importStylesheet()[xsltprocessor.importstylesheet]:xsl:version:only 1.0 features are在第10行支持C:\ xampp \ htdocs \ magento \ menu_xml \ test3 \ index.php – 2013-03-02 14:34:58

+1

您在樣式表中是否使用'version ='而不是'1.0'?上面的示例顯示了1.0,但實際文件中有什麼? – JLRishe 2013-03-02 14:41:22