我有一个像下面的xml
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0"
xmlns:c="http://base.google.com/cns/1.0">
<entry>
<g:id>1207</g:id>
<g:price>25.90 EUR</g:price>
</entry>
</feed>
我想使用以下xsl
创建数据的csv输出<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0"
xmlns:c="http://base.google.com/cns/1.0">
<xsl:output method="text" indent="yes"/>
<xsl:template match="/">id;price
<xsl:for-each select="feed/entry">
<xsl:value-of select="g:id"/>;<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我需要以下输出,但只打印标题
id;title
1207;25.90 EUR
我认为带有命名空间的东西是缺少数据的原因,任何想法?
答案 0 :(得分:0)
我认为具有命名空间的东西是其中的原因 缺少数据
是的,这是正确的。您的样式表忽略了<feed>
和<entry>
具有自己的命名空间的事实。您在样式表中错误地将此命名空间声明为默认命名空间。请尝试改为:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="http://www.w3.org/2005/Atom"
xmlns:g="http://base.google.com/ns/1.0">
<xsl:output method="text"/>
<xsl:template match="/">id;price
<xsl:for-each select="a:feed/a:entry">
<xsl:value-of select="g:id"/>;<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
当然,要以您需要的形式获取输出,模板需要看起来更像:
<xsl:template match="/">
<xsl:text>id;price
</xsl:text>
<xsl:for-each select="a:feed/a:entry">
<xsl:value-of select="g:id"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="g:price"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>