2015-02-05 5 views
0

내 xsl에 인수를 보내려고하지만 성공할 수 없습니다 .. 이유를 모르겠다 ... this link을 살펴 보았습니다.PHP에서 XSLT로 매개 변수 보내기

PHP :

내 XSL 변수 (nameArtist가) 내 PHP 변수의 값을 가지고 있다고 생각하지 않습니다

내 파일은 ($ _GET [ '이름'], 예를 들어 브로 딘 스키에 동일) 파일 :

<!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 '];);'행의 끝에있는';;;' 올바른 것으로 보입니다. –

+0

Simon에게 감사합니다. 그것은 복사/붙여 넣기의 오류입니다. 그러나 문제는 아닙니다. :) 그것은 XSL 파일의 ""라는 ligne이 문제없이, 완벽하게 작동하는 것처럼 보입니다 ... 그러나 나는 정말로 이해하지 못합니다. – Tanguinoche

+0

[msdn]에 따르면 (https://msdn.microsoft.com/en-us/library/ms256096%28v=vs.110%29.aspx), _ " ''요소는'의 직접적인 자식으로 선언되어야합니다 >'요소 "_. 템플릿으로 옮기면 도움이됩니까? –

답변

0

오래된 질문 주셔서 감사합니다. 원래 코드는 기본적으로 여기에서 작동합니다 -> apache/php7.

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

내가 좋을 것 : PHP는에,

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

뿐만 아니라 설정 PARAM :

나는, 앞서 언급 한 바와 같이,뿐만 아니라 스타일 선언을 세미 콜론을 변경 문제는 간단하게 -> $ _GET [ 'name']은 가치가 없었고, 서버 문제였습니다.