2012-01-09 11 views
1

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ファイルされる:ここでは、入力と出力XMLSと私のXSLTはある

<?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を使用できますか? –

答えて

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

関連する問題