Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

[REZOLVAT] XSLT
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Subiectul anterior :: Subiectul următor  
Autor Mesaj
OriginalCopy



Data înscrierii: 25/Mai/2008
Mesaje: 7
Locație: Slatina

Trimis: Dum Mai 25, 2008 10:50 am    Titlul subiectului: [REZOLVAT] XSLT  

Salut si bine am venit :)

Fiind primul meu post aici, tin sa mentionez ca vin de la concurenta, unde stiu ca nu voi primi ajutor. Deci daca ma ajutati poate ma si instalez aici :lol:

Acum asupra problemei: transform un fisier xml cu xslt in xhtml (PHP5, deci DOMDocument si XSLTProcessor). Fisierul xml e relativ simplu (prezint ca PoC):

Cod: <?xml version="1.0" encoding="UTF-8"?>
<article keywords="article keywords" description="article desc" subtitle="article subtitle">
   <title>xml article title</title>
   <authorgroup>
      <author>
         <surname>author surname</surname>
         <forename>author forename</forename>
         <email>test</email>
      </author>
      <author>
         <surname>author surname</surname>
         <forename>author forename</forename>
         <email>test</email>
      </author>
   </authorgroup>

   <section title="section title" keywords="section keyword" description="section desc">
      <author surname="section author surname" forename="section author forename" email="a@b.c"/>
      <content>
         section content
      </content>
      <subsection title="hello" keywords="foo" description="bar">
         <author surname="subsection author surname" forename="subsection author forename" email="a@b.c"/>
         <content>
            subsection content
         </content>
         <quizz>
         subsection quizz
         </quizz>
      </subsection>
      <quizz>
         section quizz
      </quizz>
   </section>
   <section title="section 2 title" keywords="section keyword" description="section desc">
      <author surname="section author surname" forename="section author forename" email="a@b.c"/>
      <content>
         section content
      </content>
      <subsection title="hello" keywords="foo" description="bar">
         <author surname="subsection author surname" forename="subsection author forename" email="a@b.c"/>
         <content>
            subsection content
         </content>
         <quizz>
         subsection quizz
         </quizz>
      </subsection>
      <quizz>
         section quizz
      </quizz>
   </section>
</article>
insa in cel xsl am o problema:
Cod: <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:fn="http://www.w3.org/2005/02/xpath-functions">
<xsl:output method="xml"
   doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
   doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
   encoding="UTF-8"
   indent="yes"/>
   <xsl:template match="/">
      <html>
         <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <meta name="keywords" content="{/*/@keywords}"/>
            <meta name="description" content=""/>
            <title><xsl:value-of select="./*/@title"/></title>
         </head>
         <body>
         <h1>
            <xsl:choose>
               <xsl:when test="./*/@title">
                  <xsl:value-of select="./*/@title"/>
               </xsl:when>
               <xsl:otherwise test="./*/title">
                  <xsl:value-of select="./*/title"/>
               </xsl:otherwise>
            </xsl:choose>
         </h1>
         <h2><xsl:value-of select="./*/@subtitle"/></h2>
         
         <xsl:choose>
            <xsl:when test="./*/authorgroup">
               <h3>Authors</h3>
               <xsl:apply-templates select="./*/authorgroup"/>
            </xsl:when>
            <xsl:when test="./*/author">
               By <xsl:apply-templates select="./*/author"/><br/>
            </xsl:when>
         </xsl:choose>
         <h2>In this article:</h2>
         <xsl:for-each select="article/section">
            <xsl:value-of select="@title"/>
            <br />
         </xsl:for-each>
         </body>
      </html>
   </xsl:template>
   
   <xsl:template name="authorgroup" match="authorgroup">
       <xsl:for-each select="author">
         <xsl:apply-templates select="."/><br/>
      </xsl:for-each>
   </xsl:template>
   <xsl:template name="author" match="author">
      <xsl:value-of select="surname"/> <xsl:value-of select="forename"/> &lt;<xsl:value-of select="email"/>&gt;
   </xsl:template>
</xsl:stylesheet>
si anume selectorul XPath din template-ul "authorgroup", aici "XXX", insa bineinteles ca am incercat diferite XPath-uri, bineinteles mai intai cele care mi se pareau logice:
"author", "./author" si apoi si orbeste. Bineinteles ca "//author" functioneaza, dar nu e ce vreau, din motive evidente: vreau doar autorii articolului, nu si al fiecarei sectiuni a documentului.

Deci ce XPath sa folosesc? Cred ca e simplu pentru cei ce-au mai lucrat intensiv cu XSLT/XPath. O eventuala explicatie ar fi deasemenea apreciata, daca nu deduc eu explicatia.

REZOLVARE: foloseste <xsl:apply-templates>

Si tot fiind la XPath, stiti vr-o extensie ori pentru firefox in afara de XPather sau pentru eclipse (gratis, open-source, nimic proprietary, vreau sa-mi pastrez sistemul linux curat :) ) cu care sa pot inspecta in termeni de XPath documente XML? In XPather nu e posibil sa introduc "parent" (FF 2.0.0.14), si asta nu-mi permite sa intru in contextul /*/authorgroup/ si sa inspectez copii <author> relativ la /*/authorgroup.

Multumesc anticipat.
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community