XSLT değişkenleri Passing

3 Cevap php

Ben XML / XSL yeni duyuyorum. Ben bir kural dizesinde bir var geçmek ve doğru veri döndürmek sahip olmak istiyorum.

Şu anda ben bu PHP'nin adres:

<?php
$params = array('id' => $_GET['id']);

$xslDoc = new DOMDocument(); 
$xslDoc->load("test.xsl"); 

$xmlDoc = new DOMDocument(); 
$xmlDoc->load("test.xml");

$xsltProcessor = new XSLTProcessor(); 
$xsltProcessor->registerPHPFunctions(); 
$xsltProcessor->importStyleSheet($xslDoc); 

foreach ($params as $key => $val)
    $xsltProcessor->setParameter('', $key, $val);

echo $xsltProcessor->transformToXML($xmlDoc);
?>

Benim xml dosyası gibi görünüyor:

<Profiles> 
  <Profile> 
    <id>1</id> 
    <name>john doe</name> 
    <dob>188677800</dob> 
  </Profile> 
  <Profile> 
    <id>2</id> 
    <name>mark antony</name> 
    <dob>79900200</dob> 
  </Profile> 
  <Profile> 
    <id>3</id> 
    <name>neo anderson</name> 
    <dob>240431400</dob> 
  </Profile> 
  <Profile> 
    <id>4</id> 
    <name>mark twain</name> 
    <dob>340431400</dob> 
  </Profile> 
  <Profile> 
    <id>5</id> 
    <name>frank hardy</name> 
    <dob>390431400</dob> 
  </Profile> 
</Profiles>

Ve benim xsl bu gibi görünüyor

<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:param name="id" />

  <xsl:template match="*">
    <html><body>
    <h2>Profile</h2>
    <table cellspacing="1" cellpadding="5" border="1"> 
      <caption>User Profiles</caption> 
      <tr><th>ID</th><th>Name</th><th>Date of Birth</th></tr> 

      <xsl:for-each select="/Profiles/Profile[id='$id']">
        <tr> 
          <td><xsl:value-of select="id"/></td> 
          <td><xsl:value-of select="php:function('ucwords', string(name))"/></td> 
          <td><xsl:value-of select="php:function('date', 'jS M, Y', number(dob))"/></td> 
        </tr> 
      </xsl:for-each> 
    </table> 
    </body></html>
  </xsl:template>
</xsl:stylesheet>

Ben böyle url sınarken:

http://foo.com/sanbox/index.php?id=2
I only get:
Profile
User Profiles ID    Name 	Date of Birth.

3 Cevap

Eğer doğru ad dahil sığınak çünkü hatadır.

Lütfen xsl: stylesheet bildirimi xmlns şunlardır: php = "http://php.net/xsl"

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
>

XPATH ifadede değişken adı $ id etrafında herhangi qoutes olmamalı bu yüzden okumalısınız:

<xsl:for-each select="/Profiles/Profile[id=$id]">

Ayrıca, değer birlikte geçti ulaştığından emin olmak için belgedeki bir <xsl:value-of select="$id"/> koyabilirsiniz.

Hey, ben de xsl / xml uygulama yeniyim ama biraz kod ile yaklaşık oynadı, bunu değiştirmek bile çalışan ama alamadım

<xsl:for-each select="/Profils/Profil[id='$id']">

karşı

<xsl:for-each select="/Profils/Profil[id='2']">

You still get a nasty error although it does fetch the right information. If you remove any "" or even the '' with anything but numeric it give more errors. I have found another way karşıdo this although i haven't had time karşıtest it. Client Side XSLT

I have the same problem as you and would really like karşısee this problem solved.

Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: xmlXPathCompOpEval: function function bound karşıundefined prefix php in E:\xampplite\htdocs\XSL\index.php on line 17

Uyarı: XSLTProcessor :: transformToXml () [xsltprocessor.transformtoxml]: xmlXPathCompiledEval: 1 nesneler yığını bıraktı. E: \ xampplite \ htdocs \ XSL \ index.php on line 17

Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: xmlXPathCompOpEval: function function bound karşıundefined prefix php in E:\xampplite\htdocs\XSL\index.php on line 17

Uyarı: XSLTProcessor :: transformToXml () [xsltprocessor.transformtoxml]: xmlXPathCompiledEval: 2 nesneler yığını bıraktı. E: \ xampplite \ htdocs \ XSL \ index.php on line 17

Profil

User Profils ID Name Date of Birth 2 mark antony 79900200