无法使用XSLT选择节点

时间:2012-01-09 23:51:33

标签: xml xslt

我在创建XSLT样式表时需要帮助。也就是说,我无法选择节点并为其应用模板。这是输入和输出xmls和我的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 个答案:

答案 0 :(得分:2)

正如@Zachary Young所说,当目标元素具有非空名称空间URI时,您需要在XSLT路径中使用名称空间前缀。

以下文档包含xmlns:atom声明,其中包含源文档中使用的URI。它还在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>