xslt命名空间问题rss

时间:2015-07-21 15:26:32

标签: xml xslt rss

我正在尝试转换bank of canada的Feed,以便在我的应用中使用它。

这是我的xml和我的xsl:http://xsltransform.net/bFDb2D4/4

我无法更改xml,这是一个rss feed。唯一阻止我的是这一行:

xmlns="http://purl.org/rss/1.0/"

如果我删除了这个,我的选择器很好,我得到了结果。我是xslt的初学者。有人可以解释一下我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

 xmlns="http://purl.org/rss/1.0/"

表示XML中的所有非限定元素名称(如RDF,item,title)都具有给定的名称空间。为了匹配这些元素,您需要在XSLT中使用相同的命名空间定义,并在XPath表达式中包含命名空间前缀:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:rss="http://purl.org/rss/1.0/"
    exclude-result-prefixes = "rss">

<xsl:output method="html"/>
<xsl:template match="/">
    <xsl:apply-templates select="/rss:RDF/rss:item"/>
</xsl:template>

<xsl:template match="rss:item">
    <p>
        <xsl:value-of select="rss:title"/><br/>
        <xsl:value-of disable-output-escaping="yes" select="description"/>
    </p>
</xsl:template>

</xsl:stylesheet>