2012-07-18 89 views
0

我輸入XML文件:XML轉換與PHP變量傳遞

<root> 
<child/> 
</root> 

我的預期輸出會在查看頁面源:

<root> 
    <child> 
    <new_element>new1</new_element> 
    <new_element>new2</new_element> 
    <new_element>new3</new_element> 
    </child> 
</root> 

實際輸出我得到的查看頁面源:

<root> 
    <child>&lt;new_element&gt;new1&lt;/new_element&gt; &lt;new_element&gt;new2&lt;/new_element&gt; &lt;new_element&gt;new3&lt;/new_element&gt;</child> 
</root> 

我XLST代碼:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:param name="test"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/root/child"> 
    <xsl:copy> 
     <xsl:value-of select="$test"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

我的PHP代碼:

<?php 
      $xslt = new xsltProcessor; 
      $xslt->importStyleSheet(DomDocument::load('test.xsl')); 

      $val = '<new_element>new1</new_element> <new_element>new2</new_element> <new_element>new3</new_element>'; 
      $xslt->setParameter('','test',$val); 
      echo $view = $xslt->transformToXML(DomDocument::load('test.xml')); 
?> 

通過在瀏覽器中運行這個我得到了與解析XML標籤輸出。請找出我出錯的地方。

+0

刪除標籤之間的空格。然後重試。 – Dhruvisha 2012-07-18 12:56:56

+0

不,它不起作用。 – user806444 2012-07-19 07:06:30

回答

0

參數$ test被輸入爲一個字符串,NOT一個文檔,所以你的樣式表的行爲完全按照你要求的行爲。我不相信有任何標準的XSLT函數可以將文本字符串解析爲XDM文檔。

要實現您的目標,您應該傳遞一個文件名作爲參數值,而不是text.xsl的字符串內容。然後在你的樣式表中,你可以使用document()函數。

+0

在我的情況下,我想避免編寫XML文件並動態使用XML數據。如果有任何可能,請提出建議 – user806444 2012-07-19 07:16:23

+0

如果您想要所有XML的通用解決方案,那麼不,這是不可能的。如果您有能力對數據的形狀進行一些約束,那麼也許,這取決於您的約束條件。 – 2012-07-19 08:26:12