XML Data:
<items>
<item>
<sku>123</sku>
<name>abc</name>
</item>
<item>
<sku>345</sku>
<name>cde</name>
</item>
</items>
目标输出XML:
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>Data Feed</title>
<link>http://www.example.com</link>
<description>Description of data feed</description>
<item>
<sku>123</sku>
<name>abc</name>
</item>
<item>
<sku>345</sku>
<name>cde</name>
</item>
</channel>
</rss>
XSLT转换:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:g="http://base.google.com/ns/1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="items">
<xsl:element name="rss" xmlns:g="http://base.google.com/ns/1.0">
<xsl:attribute name="version">2.0</xsl:attribute>
<xsl:element name="channel">
<xsl:element name="title">Data Feed</xsl:element>
<xsl:element name="link">https://www.example.com</xsl:element>
<xsl:element name="description">Description of data feed</xsl:element>
<xsl:for-each select="item">
<xsl:element name="item">
<sku><xsl:value-of select="sku"/></sku>
<name><xsl:value-of select="name"/></name>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我需要在XSLT转换中调整什么以使带有前缀的名称空间进入rss元素?
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
使用上面的XSLT转换,输出会错过rss元素中的xmlns:g名称空间:
<rss version="2.0">
<channel>
<title>Data Feed</title>
<link>http://www.example.com</link>
<description>Description of data feed</description>
<item>
<sku>123</sku>
<name>abc</name>
</item>
<item>
<sku>345</sku>
<name>cde</name>
</item>
</channel>
</rss>
任何帮助都是感激的!
从字面上使用<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
,而不是使用所有不必要的xsl:element
。
所以整个模板就是
<xsl:template match="items">
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>Data Feed</title>
<link>http://www.example.com</link>
<description>Description of data feed</description>
<xsl:for-each select="item">
<xsl:copy>
<sku><xsl:value-of select="sku"/></sku>
<name><xsl:value-of select="name"/></name>
</xsl:copy>
</xsl:for-each>
</channel>
</rss>
</xsl:template>
或者
<xsl:template match="items">
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>Data Feed</title>
<link>http://www.example.com</link>
<description>Description of data feed</description>
<xsl:copy-of select="item"/>
</channel>
</rss>
</xsl:template>