This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: How does one go about extracting HTML anchors from an XML file?


Hi,

one big problem is your use of <xsl:call-template>. Avoiding those by using
<xsl:apply-templates> you can avoid such errors.

My XSL would be:

<xsl:template match="p">
    <p>
        <xsl:apply-templates select="*|text()"/>
    </p>
</xsl:template>

<xsl:template match="text()">
    <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="href">
    <a href="http://{@link}";><xsl:value-of select="."/></a>
</xsl:template>

<xsl:template match="a">
    <a href="mailto:{@mailto}";><xsl:value-of select="."/></a>
</xsl:template>

This is shorter, not so prone to errors and much more readable.

Another point in my eyes would be the XML-code itself. A <href> and a <a> is
not so good, I think. Maybe better solution:
<link href="www.yahoo.com">...</link>
<mailto href="jacob_liat@hotmail.com">...</mailto>

Regards,

Joerg


> Hello all,
>
> I'm trying to retrieve links and mailto anchors from an XML file and
display
> them in an HTML page ('a href' and 'a mailto' respectively). The problem
I'm
> running into is that I don't know how to extract these anchors properly
> while preserving the overall hierarchy of the nodes.
>
> Here's what my XML file looks like:
>
> <article>
>    <summary>
>       <p>blah blah blah blah blah blah
>          blah <href link='www.yahoo.com'> some link text here</href>
> blah blah <a mailto="jacob_liat@hotmail.com>some text here</a>
> blah blah.</p>
>       <p>second paragraph with additional anchors embedded throughout
>          the paragraph text.</p>
>    </summary>
> </article>
>
> The corresponding XSL file is:
>
> <xsl:template match="p">
>    <P>
>       <xsl:choose>
>          <xsl:when test="href">
>             <xsl:for-each select="href">
>        <xsl:call-template name="href">
>           <xsl:with-param name="word">
>                      <xsl:value-of select="."/></xsl:with-param>
>        </xsl:call-template>
>     </xsl:for-each>
> </xsl:when>
> <xsl:when test="a">
>     <xsl:for-each select="a">
>        <xsl:call-template name="a">
>           <xsl:with-param name="addr">
>                      <xsl:value-of select="."/></xsl:with-param>
>        </xsl:call-template>
>     </xsl:for-each>
> </xsl:when>
>       </xsl:choose>
>    </P>
>    <xsl:value-of select="."/>
> </xsl:template>
>
>
> <xsl:template name="href">
>    <xsl:param name="word"/>
>       <A HREF="http://{@link}";><xsl:value-of select="$word"/></A>
> </xsl:template>
>
>
> <xsl:template name="a">
>    <xsl:param name="addr"/>
>       <A HREF="mailto:{@mailto}";><xsl:value-of select="$addr"/></A>
> </xsl:template>
>
>
> I'd greatly appreciate if anyone has any ideas and would kindly point me
in
> the right direction.
>
> Thanks in advance for any help,
> Liat


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]