2015-02-05 2 views
0

Я пытаюсь отправить аргумент в мой xsl, но я не могу добиться успеха. Я не понимаю, почему ... Я посмотрел на this link.Отправить параметр из PHP в XSLT

Я не думаю, что моя XSL переменная (nameArtist) имеет значение моей переменной PHP ($ _GET [ 'имя'], например, равна Бродински)

Мои файлы:

PHP файл:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <link rel="stylesheet" href="style.css" /> 
    <title>Zozor - Carnets de voyage</title> 
</head> 

<body> 
<?php 

     // Load XML file 
     $xml = new DOMDocument; 
     $xml->load('artists.xml'); 

     // Load XSL file 
     $xsl = new DOMDocument; 
     $xsl->load('artist.xsl'); 

    $process = new XSLTProcessor; 
    $process->importStyleSheet($xsl); 

    $process->setParameter('', 'nameArtist', $_GET['name'];); 

    echo $process->transformToXML($xml); 

?> 
</body> 

XML файла:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-model href="artist.rnc" type="application/relax-ng-compact-syntax"?> 

<?xml-stylesheet type="text/xsl" href="artist.xsl"?> 

<ArtistCollection> 
    <artist> 
     <name>Brodinski</name> 
     <musicCategory>Electronic</musicCategory> 
     <originalCountry>Germany</originalCountry> 
     <photo>esfsdfsf</photo> 
    </artist> 

    <artist> 
     <name>Louis Armstrong</name> 
     <musicCategory>Jazz</musicCategory> 
     <originalCountry>United States</originalCountry> 
    </artist> 

    <artist> 
     <name>Miles Davis</name> 
     <musicCategory>Jazz</musicCategory> 
     <originalCountry>United States</originalCountry> 
    </artist> 
</ArtistCollection> 

XSLT Файл:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 
    <xsl:param name="nameArtist" /> 
    <xsl:template match="/"> 

     <html> 
      <body> 
       <h2>Artists</h2> 

       <p>salut <xsl:value-of select="$nameArtist" /></p> 

       <xsl:for-each select="ArtistCollection/artist"> 

        <table border="1"> 
         <tr bgcolor="#9acd32"> 
          <th>name</th> 
          <th>category</th> 
          <th>country</th> 
         </tr> 
         <tr> 
          <td><xsl:value-of select="name"/></td> 
          <td><xsl:value-of select="musicCategory"/> </td> 
          <td><xsl:value-of select="originalCountry"/></td> 
         </tr> 
        </table> 
       </xsl:for-each> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

Спасибо за вашу помощь :)

+1

Я не разработчик php, а ';);' в конце строки '$ process-> setParameter ('', 'nameArtist', $ _GET ['name'];);' doesn Кажется, это правильно. –

+0

Спасибо Саймону, это ошибка копирования/вставки, но это не проблема :). Похоже, что в файле XSL существует символ «", без него он отлично работает ... Но я действительно не понимаю, почему – Tanguinoche

+0

Согласно [msdn] (https://msdn.microsoft.com/en-us/library/ms256096%28v=vs.110%29.aspx), _ "Элемент' 'должен быть объявлен как прямой дочерний элемент шаблона' 'element" _. Если вы переместите его в шаблон, это поможет? –

ответ

0

Старый вопрос, без ответа принято. Исходный код в основном работает здесь -> apache/php7.

Я изменил с запятой, как уже упоминалось ранее, а также декларацию стилей:

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

, а также множество параметров, в PHP:

$process->setParameter('', 'nameArtist', "this value") 

Я предлагаю проблема была либо в том, что просто -> $ _GET ['name'] не имела значения, альтернативно проблема с сервером.

Смежные вопросы