【问题标题】:parsing in PHP variable to XSLT using setParameter使用 setParameter 将 PHP 变量解析为 XSLT
【发布时间】:2013-02-16 20:54:50
【问题描述】:

我有这个 xml 文件

<?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 那么它工作正常n xsl 将是

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

如果我同时使用,那么它不起作用

【问题讨论】:

  • 你不能把变量放在路径里面。将路径放入我认为可行的整个变量中。
  • @hakre 如果我使用$s_value 那么它的工作...
  • 是的,因为它是一个有效的 xpath 变量,另一个不是因为放置在路径内。如果有帮助,您可以尝试比较本地名称。
  • 我已经尝试过将整个路径放在一个变量中,但它仍然不起作用
  • 那么这不起作用。执行 localname 建议,比较元素名称是否有效。见local-name()

标签: php xml xslt


【解决方案1】:

这不是有效的 XPath:

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

因为这样的斜线后面不能出现变量。为了完成你想做的事情,试试这个:

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

【讨论】:

  • 我得到了输出,但有类似警告的警告:XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: 编译错误:文件文件:///C:/xampp/htdocs/magento/menu_xml /test3/test.xsl 第 1 行 C:\xampp\htdocs\magento\menu_xml\test3\index.php 中第 10 行元素样式表和警告:XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: xsl:version: only第 10 行的 C:\xampp\htdocs\magento\menu_xml\test3\index.php 支持 1.0 功能
  • 您在样式表中是否使用了version= 而不是1.0?您上面的示例显示的是 1.0,但实际文件中有什么?
猜你喜欢
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2015-09-10
  • 2013-07-12
  • 2012-05-22
  • 1970-01-01
相关资源
最近更新 更多