【发布时间】:2010-03-21 11:03:33
【问题描述】:
您好,我想 work around a 'bug' in certain RSS-feeds,它为 mediaRSS 模块使用了不正确的命名空间。我尝试通过以编程方式操作 DOM 来做到这一点,但使用 XSLT 对我来说似乎更灵活。
例子:
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss" url="http://www.suedkurier.de/storage/pic/dpa/infoline/brennpunkte/4311018_0_merkelxI_24280028_original.large-4-3-800-199-0-3131-2202.jpg" />
<media:thumbnail url="http://www.suedkurier.de/storage/pic/dpa/infoline/brennpunkte/4311018_0_merkelxI_24280028_original.large-4-3-800-199-0-3131-2202.jpg" />
命名空间必须是http://search.yahoo.com/mrss/(注意斜线)。
这是我的样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="//*[namespace-uri()='http://search.yahoo.com/mrss']">
<xsl:element name="{local-name()}" namespace="http://search.yahoo.com/mrss/" >
<xsl:apply-templates select="@*|*|text()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
不幸的是,转换的结果是无效的 XML,我的 RSS-Parser (ROME Library) 不再解析提要:
java.lang.IllegalStateException: Root element not set
at org.jdom.Document.getRootElement(Document.java:218)
at com.sun.syndication.io.impl.RSS090Parser.isMyType(RSS090Parser.java:58)
at com.sun.syndication.io.impl.FeedParsers.getParserFor(FeedParsers.java:72)
at com.sun.syndication.io.WireFeedInput.build(WireFeedInput.java:273)
at com.sun.syndication.io.WireFeedInput.build(WireFeedInput.java:251)
... 8 more
我的样式表有什么问题?
【问题讨论】: