在xml中传递参数

发布于 2024-09-12 08:59:35 字数 4572 浏览 9 评论 0 原文

我正在尝试使用 此代码 在 xml 中实现分页,并抽出时间使其发挥作用。虽然它工作得很好,但有一个小问题,当我单击“下一步”按钮时,它会不断重新加载具有相同初始记录的页面。它不会将用户带到下一页。

我遇到了此链接,其中海报有一个类似的问题,从答案看来似乎需要传递参数。然而,该链接中的人正在使用 MM_XSLTransform,而我没有。因此,当我尝试在index.php中实现此代码时:

$xsl->addParameter("Page", $_GET["Page"]);
$xsl->addParameter("PageSize", $_GET["PageSize"]);

它会抛出错误:

Fatal error: Call to undefined method XSLTProcessor::addParameter() 

更新

php代码:

<?php
        error_reporting(E_ALL);
        ini_set("display_errors", 1);

            $xmldoc = new DOMDocument();
            if(!file_exists('test.xml')){
              echo "Sorry this file does not exists!";
              exit();
            } else {
                $xmldoc->load('test.xml', LIBXML_NOBLANKS);

               // Load up the XSL file
                $xslDoc = new DomDocument;
                $xslDoc->load("test.xsl");
                $xsl = new XSLTProcessor;
                $xsl->importStyleSheet($xslDoc);

                $xsl->setParameter(null, 'Page', $_GET['Page']);
                $xsl->setParameter(null, 'PageSize', $_GET['PageSize']);

                // apply the transformation
                echo $xsl->transformToXml($xmldoc);

            } 
?>

xsl:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />

<!-- XML Parameters -->
<xsl:param name="Page" select="0" />
<xsl:param name="PageSize" select="5" />

<xsl:template match="/">

<xsl:variable name="mycount" select="count(root/verse)"/>
<xsl:variable name="selectedRowCount" select="floor((number($mycount)-1) div $PageSize)+1"/>

<div>
    <div>
        <xsl:value-of select="root/title"/>
    </div>
    <div>
        <p><xsl:value-of select="root/introduction"/></p>
    </div>
    <div>

            <xsl:for-each select="root/verse">  

                <xsl:if test="position() &gt;= ($Page * $PageSize) + 1">
                <xsl:if test="position() &lt;= $PageSize + ($PageSize * $Page)">

                    <div><xsl:value-of select="p"/></div> <br />
                    <div><xsl:value-of select="trla"/></div> <br />
                    <div><xsl:value-of select="trli"/></div> <br />

                </xsl:if>
                </xsl:if>
            </xsl:for-each>


            <!-- Prev link for pagination -->
              <xsl:choose>
               <xsl:when test="number($Page)-1 &gt;= 0">&#160;
                <A>
                 <xsl:attribute name="href">index.php?page=<xsl:value-of select="number($Page)-1"/>&amp;pagesize=<xsl:value-of select="$PageSize"/></xsl:attribute>
                  &lt;&lt;Prev
                </A>
               </xsl:when>
               <xsl:otherwise>
                <!-- display something else -->
               </xsl:otherwise>
              </xsl:choose>

              <xsl:if test="$selectedRowCount &gt; 1">
               &#160;<b class="blacktext"><xsl:value-of select="number($Page)+1"/>&#160;of&#160;<xsl:value-of select="number($selectedRowCount)"/></b>&#160;
              </xsl:if>

              <!-- Next link for pagination -->
              <xsl:choose>
               <xsl:when test="number($Page)+1 &lt; number($selectedRowCount)">&#160;
                <A>
                 <xsl:attribute name="href">index.php?page=<xsl:value-of select="number($Page)+1"/>&amp;pagesize=<xsl:value-of select="$PageSize"/></xsl:attribute>
                  Next&gt;&gt;
                </A>
               </xsl:when>
               <xsl:otherwise>
                <!-- display something else -->
               </xsl:otherwise>
              </xsl:choose>

    </div>

</div>

</xsl:template>
</xsl:stylesheet>

i'm trying to implement paging in xml using this code and got around to making it work. while it works perfectly, there is a small issue, that when i click on the NEXT button, it keeps reloading the page with the same initial records. it does not take the user to the next page.

i came across this link wherein the poster had a similar issue, and it seems from the answers parameters need to be passed. however, the guy in that link was using MM_XSLTransform, while i'm not. hence when i try to implement this code in index.php:

$xsl->addParameter("Page", $_GET["Page"]);
$xsl->addParameter("PageSize", $_GET["PageSize"]);

it throws an error:

Fatal error: Call to undefined method XSLTProcessor::addParameter() 

UPDATED

php code:

<?php
        error_reporting(E_ALL);
        ini_set("display_errors", 1);

            $xmldoc = new DOMDocument();
            if(!file_exists('test.xml')){
              echo "Sorry this file does not exists!";
              exit();
            } else {
                $xmldoc->load('test.xml', LIBXML_NOBLANKS);

               // Load up the XSL file
                $xslDoc = new DomDocument;
                $xslDoc->load("test.xsl");
                $xsl = new XSLTProcessor;
                $xsl->importStyleSheet($xslDoc);

                $xsl->setParameter(null, 'Page', $_GET['Page']);
                $xsl->setParameter(null, 'PageSize', $_GET['PageSize']);

                // apply the transformation
                echo $xsl->transformToXml($xmldoc);

            } 
?>

xsl:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />

<!-- XML Parameters -->
<xsl:param name="Page" select="0" />
<xsl:param name="PageSize" select="5" />

<xsl:template match="/">

<xsl:variable name="mycount" select="count(root/verse)"/>
<xsl:variable name="selectedRowCount" select="floor((number($mycount)-1) div $PageSize)+1"/>

<div>
    <div>
        <xsl:value-of select="root/title"/>
    </div>
    <div>
        <p><xsl:value-of select="root/introduction"/></p>
    </div>
    <div>

            <xsl:for-each select="root/verse">  

                <xsl:if test="position() >= ($Page * $PageSize) + 1">
                <xsl:if test="position() <= $PageSize + ($PageSize * $Page)">

                    <div><xsl:value-of select="p"/></div> <br />
                    <div><xsl:value-of select="trla"/></div> <br />
                    <div><xsl:value-of select="trli"/></div> <br />

                </xsl:if>
                </xsl:if>
            </xsl:for-each>


            <!-- Prev link for pagination -->
              <xsl:choose>
               <xsl:when test="number($Page)-1 >= 0"> 
                <A>
                 <xsl:attribute name="href">index.php?page=<xsl:value-of select="number($Page)-1"/>&pagesize=<xsl:value-of select="$PageSize"/></xsl:attribute>
                  <<Prev
                </A>
               </xsl:when>
               <xsl:otherwise>
                <!-- display something else -->
               </xsl:otherwise>
              </xsl:choose>

              <xsl:if test="$selectedRowCount > 1">
                <b class="blacktext"><xsl:value-of select="number($Page)+1"/> of <xsl:value-of select="number($selectedRowCount)"/></b> 
              </xsl:if>

              <!-- Next link for pagination -->
              <xsl:choose>
               <xsl:when test="number($Page)+1 < number($selectedRowCount)"> 
                <A>
                 <xsl:attribute name="href">index.php?page=<xsl:value-of select="number($Page)+1"/>&pagesize=<xsl:value-of select="$PageSize"/></xsl:attribute>
                  Next>>
                </A>
               </xsl:when>
               <xsl:otherwise>
                <!-- display something else -->
               </xsl:otherwise>
              </xsl:choose>

    </div>

</div>

</xsl:template>
</xsl:stylesheet>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一个人的旅程 2024-09-19 08:59:35

查看xsl 模块的文档。您会发现一个setParameter方法。

编辑:例如

<?php
$doc = new DOMDocument;
$doc->loadxml('<a />');
$proc = getProcessor();
$proc->setParameter(null, 'Page', '99');
$proc->setParameter(null, 'PageSize', '11');
echo $proc->transformToXML($doc);

function getProcessor() {
  $doc = new DOMDocument;
  $doc->loadxml('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:param name="Page" select="0" />
    <xsl:param name="PageSize" select="1" />
    <xsl:template name="results" match="/">
      Page: <xsl:value-of select="$Page" />
      PageSize: <xsl:value-of select="$PageSize" />
    </xsl:template>
  </xsl:stylesheet>');
  $xsl = new XSLTProcessor();
  $xsl->importStyleSheet($doc);

  return $xsl;
}

打印

Page: 99
PageSize: 11

edit2: 尝试

<?php
$page = isset($_GET['Page']) ? intval($_GET['Page']) : 0;

$proc = getProcessor();
$proc->setParameter(null, 'Page', $page);
$proc->setParameter(null, 'PageSize', '11');
$doc = getDoc();
echo $proc->transformToXML($doc);

function getProcessor() {
  $doc = new DOMDocument;
  $doc->loadxml('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" />
    <xsl:param name="Page" select="0" />
    <xsl:param name="PageSize" select="1" />
    <xsl:template name="results" match="/">
      Page: <xsl:value-of select="$Page" />
      PageSize: <xsl:value-of select="$PageSize" />
      <hr />
      <a><xsl:attribute name="href">?Page=<xsl:value-of select="($Page)-1" /></xsl:attribute>Prev</a>
      |
      <a><xsl:attribute name="href">?Page=<xsl:value-of select="($Page)+1" /></xsl:attribute>Next</a>
    </xsl:template>
  </xsl:stylesheet>');
  $xsl = new XSLTProcessor();
  $xsl->importStyleSheet($doc);

  return $xsl;
}

function getDoc() {
  $doc = new DOMDocument;
  $doc->loadxml('<a></a>');
  return $doc;
}

edit3: 在您的代码中,您可以

index.php?page=<xsl:value-of select="number($Page)-1"/>

使用 $_GET['page'] 而不是 $_GET['Page'] 或更改index.php?Page= 的模板。与PageSize/pagesize 相同。

Take a look at the documentation of the xsl module. You will find a setParameter method.

edit: e.g.

<?php
$doc = new DOMDocument;
$doc->loadxml('<a />');
$proc = getProcessor();
$proc->setParameter(null, 'Page', '99');
$proc->setParameter(null, 'PageSize', '11');
echo $proc->transformToXML($doc);

function getProcessor() {
  $doc = new DOMDocument;
  $doc->loadxml('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:param name="Page" select="0" />
    <xsl:param name="PageSize" select="1" />
    <xsl:template name="results" match="/">
      Page: <xsl:value-of select="$Page" />
      PageSize: <xsl:value-of select="$PageSize" />
    </xsl:template>
  </xsl:stylesheet>');
  $xsl = new XSLTProcessor();
  $xsl->importStyleSheet($doc);

  return $xsl;
}

prints

Page: 99
PageSize: 11

edit2: Try

<?php
$page = isset($_GET['Page']) ? intval($_GET['Page']) : 0;

$proc = getProcessor();
$proc->setParameter(null, 'Page', $page);
$proc->setParameter(null, 'PageSize', '11');
$doc = getDoc();
echo $proc->transformToXML($doc);

function getProcessor() {
  $doc = new DOMDocument;
  $doc->loadxml('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" />
    <xsl:param name="Page" select="0" />
    <xsl:param name="PageSize" select="1" />
    <xsl:template name="results" match="/">
      Page: <xsl:value-of select="$Page" />
      PageSize: <xsl:value-of select="$PageSize" />
      <hr />
      <a><xsl:attribute name="href">?Page=<xsl:value-of select="($Page)-1" /></xsl:attribute>Prev</a>
      |
      <a><xsl:attribute name="href">?Page=<xsl:value-of select="($Page)+1" /></xsl:attribute>Next</a>
    </xsl:template>
  </xsl:stylesheet>');
  $xsl = new XSLTProcessor();
  $xsl->importStyleSheet($doc);

  return $xsl;
}

function getDoc() {
  $doc = new DOMDocument;
  $doc->loadxml('<a></a>');
  return $doc;
}

edit3: In your code you have

index.php?page=<xsl:value-of select="number($Page)-1"/>

Either use $_GET['page'] instead of $_GET['Page'] or change the template to index.php?Page=<xsl:value .... Same with PageSize/pagesize.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文