1

I need help in creating an XSLT style sheet. Namely, I cannot select the node and apply the template for it. Here are the input and output xmls and my XSLT :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>

<xsl:template match="/">
    <searchresult>
        <query>
            <xsl:value-of select="/feed/title"/>
        </query>
        <xsl:apply-templates select="doc-template"/>
    </searchresult>
</xsl:template>
<xsl:template name="doc-template" match="entry">
    <document>
        <title>
            <xsl:value-of select="title"/>
        </title>
        <snippet>
            <xsl:value-of select="content"/>
        </snippet>
    </document>
</xsl:template>
</xsl:stylesheet>

and the XML file is:

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns:google="http://base.google.com/ns/1.0" xml:lang="en-US" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://www.w3.org/2005/Atom" xmlns:twitter="http://api.twitter.com/" xmlns:georss="http://www.georss.org/georss">
    <title>salsa - Twitter Search</title>
    <entry>
        <id>tag:search.twitter.com,2005:156464188011708416</id>
        <published>2012-01-09T19:55:44Z</published>
        <link type="text/html" href="http://twitter.com/RodFF/statuses/156464188011708416" rel="alternate"/>
        <title>Al fin ponen mi tanda! @Anelito_Amed @samueltejeira @Elieser_Soriano @jose2734 #salsa #frankieruiz</title>
        <content type="html">Al fin ponen mi tanda! @&lt;a class=" " href="http://twitter.com/Anelito_Amed"&gt;Anelito_Amed&lt;/a&gt; @&lt;a class=" " href="http://twitter.com/samueltejeira"&gt;samueltejeira&lt;/a&gt; @&lt;a class=" " href="http://twitter.com/Elieser_Soriano"&gt;Elieser_Soriano&lt;/a&gt; @&lt;a class=" " href="http://twitter.com/jose2734"&gt;jose2734&lt;/a&gt; #&lt;em&gt;salsa&lt;/em&gt; &lt;a href="http://search.twitter.com/search?q=%23frankieruiz" title="#frankieruiz" class=" "&gt;#frankieruiz&lt;/a&gt;</content>
        <updated>2012-01-09T19:55:44Z</updated>
        <link type="image/png" href="http://a1.twimg.com/profile_images/1672210480/IMG-20111008-00231_normal.jpg" rel="image"/>
        <twitter:geo></twitter:geo>
        <twitter:metadata>
            <twitter:result_type>recent</twitter:result_type>
        </twitter:metadata>
        <twitter:source>&lt;a href="http://blackberry.com/twitter" rel="nofollow"&gt;Twitter for BlackBerry&#xae;&lt;/a&gt;</twitter:source>
        <twitter:lang>es</twitter:lang>
        <author>
            <name>RodFF (Rodolfo Franceschi )</name>
            <uri>http://twitter.com/RodFF</uri>
        </author>
    </entry>
    <entry>
        <id>tag:search.twitter.com,2005:156464182433288194</id>
        <published>2012-01-09T19:55:42Z</published>
        <link type="text/html" href="http://twitter.com/Olqa_N/statuses/156464182433288194" rel="alternate"/>
        <title>No causo el efecto que imaginaste No me hizo el danio que tu pensaste no llore mas de lo que creiste no hiciste falta cuando te fuiste#salsa</title>
        <content type="html">No causo el efecto que imaginaste No me hizo el danio que tu pensaste no llore mas de lo que creiste no hiciste falta cuando te fuiste#&lt;em&gt;salsa&lt;/em&gt;</content>
        <updated>2012-01-09T19:55:42Z</updated>
        <link type="image/png" href="http://a3.twimg.com/profile_images/1734507487/IMG01812-20110621-1025_jpg_normal.jpg" rel="image"/>
        <twitter:geo></twitter:geo>
        <twitter:metadata>
            <twitter:result_type>recent</twitter:result_type>
        </twitter:metadata>
        <twitter:source>&lt;a href="http://ubersocial.com" rel="nofollow"&gt;&#xdc;berSocial for BlackBerry&lt;/a&gt;</twitter:source>
        <twitter:lang>es</twitter:lang>
        <author>
            <name>Olqa_N (Olqa Lopez)</name>
            <uri>http://twitter.com/Olqa_N</uri>
        </author>
    </entry>
</feed>
1
  • 2
    The major problem is that you are not using any of the namespaces defined in the source document. At the very least you need to be aware of xmlns="http://www.w3.org/2005/Atom". Do you have to use XSLT 1.0, or can you use XSLT 2.0? Commented Jan 10, 2012 at 0:03

1 Answer 1

3

As @Zachary Young said, you need to use namespace prefixes in XSLT paths when the target elements have a non-empty namespace URI.

The following document contains an xmlns:atom declaration with the URI used in the source document. It also uses the atom: prefix in XPath steps. I've also made other modifications to achieve what I think you were trying to do using an "XSLT" kind of idiom.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
     xmlns:atom="http://www.w3.org/2005/Atom">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>

<xsl:template match="/atom:feed">
<searchresult>
 <query>
    <xsl:value-of select="atom:title"/>
  </query>
    <xsl:apply-templates select="atom:entry"/>
</searchresult>
</xsl:template>

<xsl:template match="atom:entry">
<document>
  <title>
    <xsl:value-of select="atom:title"/>
  </title>
  <snippet>
    <xsl:value-of select="atom:content"/>
  </snippet>
</document>
</xsl:template>
</xsl:stylesheet>

It produces the following output on our XML (which I've indented):

<searchresult xmlns:atom="http://www.w3.org/2005/Atom">
    <query>salsa - Twitter Search</query>
    <document>
        <title>Al fin ponen mi tanda! @Anelito_Amed @samueltejeira @Elieser_Soriano @jose2734 #salsa #frankieruiz</title>
        <snippet>Al fin ponen mi tanda! @&lt;a class=" " href="http://twitter.com/Anelito_Amed"&gt;Anelito_Amed&lt;/a&gt; @&lt;a class=" " href="http://twitter.com/samueltejeira"&gt;samueltejeira&lt;/a&gt; @&lt;a class=" " href="http://twitter.com/Elieser_Soriano"&gt;Elieser_Soriano&lt;/a&gt; @&lt;a class=" " href="http://twitter.com/jose2734"&gt;jose2734&lt;/a&gt; #&lt;em&gt;salsa&lt;/em&gt; &lt;a href="http://search.twitter.com/search?q=%23frankieruiz" title="#frankieruiz" class=" "&gt;#frankieruiz&lt;/a&gt;</snippet>
    </document>
    <document>
        <title>No causo el efecto que imaginaste No me hizo el danio que tu pensaste no llore mas de lo que creiste no hiciste falta cuando te fuiste#salsa</title>
        <snippet>No causo el efecto que imaginaste No me hizo el danio que tu pensaste no llore mas de lo que creiste no hiciste falta cuando te fuiste#&lt;em&gt;salsa&lt;/em&gt;</snippet>
    </document>
</searchresult>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.