没有输出xslt转换导致使用的命名空间

时间:2014-03-26 14:30:54

标签: xml xslt csv namespaces

我有一个像下面的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>&#xA;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

我需要以下输出,但只打印标题

id;title       
1207;25.90 EUR

我认为带有命名空间的东西是缺少数据的原因,任何想法?

1 个答案:

答案 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>&#xA;</xsl:text>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

编辑:

当然,要以您需要的形式获取输出,模板需要看起来更像:

<xsl:template match="/">
    <xsl:text>id;price&#xA;</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>&#xA;</xsl:text>
    </xsl:for-each>
</xsl:template>