2012-07-18 92 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