 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| 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"/> <<xsl:value-of select="email"/>>
</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 |
|
| |
|