XSLT转换时如何为rss元素添加带前缀的xmlns:g命名空间
原因
XSLT处理器默认会自动移除输出内容中未被实际使用的命名空间声明,你当前的转换结果里没有任何使用g前缀的元素或属性,因此xmlns:g声明被优化掉了。
解决方法
方案1(兼容XSLT 1.0,推荐)
直接手动给rss节点添加命名空间属性即可,修改后的完整代码如下:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="items"> <rss version="2.0"> <!-- 手动添加g命名空间声明 --> <xsl:attribute name="xmlns:g">http://base.google.com/ns/1.0</xsl:attribute> <channel> <title>Data Feed</title> <link>http://www.example.com</link> <description>Description of data feed</description> <xsl:for-each select="item"> <item> <sku><xsl:value-of select="sku"/></sku> <name><xsl:value-of select="name"/></name> </item> </xsl:for-each> </channel> </rss> </xsl:template> </xsl:stylesheet>
方案2(XSLT 2.0及以上可用)
使用专门的<xsl:namespace>指令强制输出命名空间:
<xsl:namespace name="g" select="'http://base.google.com/ns/1.0'"/>
把这行代码放到rss节点内部即可。
内容的提问来源于stack exchange,提问作者jburkhardt
相关产品推荐
相关产品推荐

