我已经成功地使用新闻源了很长一段时间了。 然而,本周我遇到了一个问题:我的RSS Feed中的一个节点有一个自定义命名空间。 无论我尝试什么,都不会返回具有自定义命名空间的节点。
示例Feed:
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:mailplus="http://api.mailplus.nl/rss/mailplus/">
<channel>
<item>
<title>test</title>
<link>www.google.com</link>
<description>This is a test</description>
<mailplus:image>
<![CDATA[http://www.test.nl/Portals/0/Images/Nieuws/ADO FC Groningen vierkant 2.jpg]]>
</mailplus:image>
</item>
</channel>
</rss>
我的XSL文件示例:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mailplus="http://api.mailplus.nl/rss/mailplus/">
<xsl:output method="html" indent="yes"/>
<xsl:param name="ItemsToShow"/>
<xsl:param name="ShowItemDetails"/>
<xsl:param name="ShowItemDate"/>
<xsl:param name="Locale"/>
<xsl:param name="Target"/>
<xsl:template match="rss">
<ul class="RSS">
<xsl:for-each select="channel/item">
<xsl:sort select="position()" data-type="number" order="descending" />
<xsl:if test="position()<=$ItemsToShow or $ItemsToShow<1">
<li>
<h3>
<xsl:attribute name="target"><xsl:value-of select="$Target"/></xsl:attribute>
<xsl:value-of select="title"/>
</h3>
<xsl:value-of select="./*[namespace-uri()='http://api.mailplus.nl/rss/mailplus/']" disable-output-escaping="yes"/>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
预期结果:
Test
<![CDATA[http://www.test.nl/Portals/0/Images/Nieuws/ADO FC Groningen vierkant 2.jpg]]>
实际结果:
Test
我测试了多个不同的select语句,例如:
select="mailplus:image"
select="./mailplus:*"
select="./*[local-name()='image']"
select="./*[namespace-uri()='http://api.mailplus.nl/rss/mailplus/']"
select="./*[local-name()='image' and namespace-uri()='http://api.mailplus.nl/rss/mailplus/']"
但是,这些都不会返回任何内容。
我已经能够在http://www.xpathtester.com/test的在线解析器中成功测试这些select语句。在使用在线解析器时,我必须将select查询中的“./”更改为“//”,因为在这种情况下我没有使用for-each循环。
任何人都可以确认我是在正确的轨道上,还是指出我做错了什么?
提前感谢您的建议。 Hanneke