My, there have been a lot of questions about XSLT in the past 24 hrs... 
admittedly most of them coming from me.  In addition to my first 
question (repeated below for clarity), I have a second one -- how do I 
perform an XSLT transformation on multiple XML documents?  Do I need to 
perform a separate XSLT transformation on each one?  The reason I ask is 
b/c I am pulling my XML from a DB, so there may be more than one based 
on the results from the query.  If anyone can answer this, that'd be 
great.

If not, perhaps you can help with this situation, which I believe will 
probably plague just about any PHP programmer who will ever use XSLT 
with PHP (or possibly any other language):

I am still unsure of the best way to mix PHP & [X]HTML together in an 
XSLT stylesheet, because regardless of whether you specify the output 
method as "text" or "xml", if you are using HTML tags they must be 
well-formed, because Sablotron or expat (not sure which) will want the 
XSLT stylesheet to be a well-formed document.  Only, we often interrupt 
our HTML code when using PHP, like this:

$output_to_browser = "<a href='index.php'>Go";
$output_to_browser .= "home</a>";

(of course, the output to the browser will by a hyperlink to index.php 
that says "Go home".)

The above looks fine as PHP code, but if you try to manipulate the data 
from an XSLT process in this fashion, you won't be able to use HTML 
tags -- the greater-than and less-than symbols can't be used, since an 
XSLT sheet is technically an XML document and these are not well-formed 
tags.  In the XSLT sheet, the above might look like:

<xsl:template match="location">
  <a href="<xsl:value-of select="php_document" />">Go Home</a>
</xsl:template>

I thought that perhaps if I specified text as the output method, then 
the greater-than and less-than signs wouldn't be parsed, so I could use 
them as such:

<xsl:output method="text" />

<xsl:template match="location">
  <xsl:text>
    <a href="
  </xsl:text>
     <xsl:value-of select="php_document" />
  <xsl:text>
    ">Go Home</a>
  </xsl:text>
</xsl:template match="location">

See what's happening in the above?  I thought I had "escaped" my <a> 
tags by placing them within the <xsl:text> tags, but this is not so -- 
they are parsed, and the document is then interpreted as not being 
well-formed.


So unless you want to do a straight XML-to-XML or XML-to-XHTML 
transformation, OR you don't want to use ANY XML or XHTML tags in your 
output document, you're kind of up a river.  Unless someone on this list 
can help me find a way to "escape" the HTML tags when creating PHP code.

And the only way I can think of doing it (which I still haven't tested, 
but might have to use) is to use variables to represent the HTML tags so 
that instead of

<a href="    and     ">Go Home</a>

I could use

$astartag = "<a href='";
$aendtag = "'>Go Home</a>";

and then make the style sheet like this:

<xsl:output method="text" />

<xsl:template match="location">
  <xsl:text>
    $astartag
  </xsl:text>
     <xsl:value-of select="php_document" />
  <xsl:text>
    $aendtag
  </xsl:text>
</xsl:template match="location">


That should work in theory.  But it's incredibly crude.


What do you all think?





Erik







----

Erik Price
Web Developer Temp
Media Lab, H.H. Brown
[EMAIL PROTECTED]


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to