【问题标题】:Xml transformation with variable passing in phpphp中变量传递的xml转换
【发布时间】:2012-07-18 09:30:24
【问题描述】:

我的输入 xml 文件:

 <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 标签的输出。请找出我哪里出错了。

【问题讨论】:

  • 删除 标签之间的空格。然后重试。

标签: php xml xslt


【解决方案1】:

参数 $test 是作为字符串键入的,不是文档,因此您的样式表的行为与您要求的行为完全相同。我不相信有任何标准的 XSLT 函数可以将文本字符串解析为 XDM 文档。

为了达到你的目的,你应该传递一个文件名作为你的参数值,而不是 text.xsl 的字符串内容。然后在您的样式表中,您可以使用 document() 函数。

【讨论】:

  • 在我的情况下,我想避免编写 xml 文件并动态使用 xml 数据。如果有任何可能,请建议我
  • 如果您想要一个适用于所有 XML 的通用解决方案,那么不,这是不可能的。如果您能够对数据的形状进行一些限制,那么,也许,取决于您的限制。
猜你喜欢
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多