2012-01-09 171 views
1

我需要幫助來創建XSLT樣式表。也就是說,我無法選擇節點併爲其應用模板。下面是輸入和輸出的XML,並我的XSLT:無法使用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> 

和XML文件:

<?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

的主要問題是,你沒有使用任何源文檔中定義的命名空間。至少你需要知道'xmlns =「http://www.w3.org/2005/Atom」'。你是否必須使用XSLT 1.0,還是可以使用XSLT 2.0? – 2012-01-10 00:03:18

回答

2

正如@Zachary楊說,你需要在XSLT路徑使用的命名空間前綴當目標元素有一個非空的名稱空間URI。

以下文檔包含使用源文檔中使用的URI的xmlns:atom聲明。它在XPath步驟中也使用atom:前綴。我還做了其他修改,以實現我認爲您嘗試使用「XSLT」類慣用語的做法。

<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> 

它產生以下輸出我們的XML(我已經縮進):

<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> 
+0

謝謝!!! :) – user1139815 2012-01-10 00:38:42