对于 Google Merchant Center 集成,我需要提供 XML,其中一些元素具有命名空间前缀,例如:
<g:availability>in stock</g:availability>,
而其他不需要命名空间,例如:
<title>My Product</title>
但是,我无法想出一个允许我的 XSLT:
1) 指定相应的命名空间 (xmlns:g="http://base.google.com/ns/1.0") AND 2) 前缀属性
,没有在某处添加“g”命名空间。
我相信 exclude-result-prefixes="g" 不适用于我的用例。要重新迭代,我需要在一些 XML 元素前面加上“g”。如果我不需要这样做,例如
<availability>in stock<availability>
,然后 exclude-result-prefixes 工作正常。但是,当我将前缀添加到我的元素时,命名空间会在 XSLT 运行时添加。我在下面有一个这种情况的例子。
谢谢。
XSLT:
<xsl:template match="/">
<xsl:element name="type">
<xsl:for-each select="categories/product">
<xsl:element name="product">
<g:availability>
<xsl:text>preorder</xsl:text>
</g:availability>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
XML:
<?xml version="1.0" encoding="UTF-8"?>
<categories>
<product>
<id>1</id>
<preorder>true</preorder>
<releaseDate>true</releaseDate>
<quantity>1</quantity>
</product>
<product>
<id>2</id>
<preorder>false</preorder>
<quantity>0</quantity>
</product>
<product>
<id>3</id>
<preorder></preorder>
<quantity>10</quantity>
</product>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<type>
<product>
<g:availability xmlns:g="http://base.google.com/ns/1.0">preorder</g:availability>
</product>
<product>
<g:availability xmlns:g="http://base.google.com/ns/1.0">preorder</g:availability>
</product>
<product>
<g:availability xmlns:g="http://base.google.com/ns/1.0">preorder</g:availability>
</product>
</type>
(不完整)Google Merchant,预期的 XML 示例
<?xml version="1.0"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>Example - Online Store</title>
<item>
<title>LG Flatron M2262D 22" Full HD LCD TV</title>
<g:id>TV_123456</g:id>
<g:condition>used</g:condition>
</item>
</channel>
</rss>
使用 XSLT 版本 1