在基本转换

时间:2017-01-05 21:57:54

标签: xml xslt

我正在尝试将以下XML转换为JSON以进行分配,但我收到错误:

This XML file does not appear to have any style information associated with it.

source.xml

<people>
  <name>John</name>
</people>

converter.xslt

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
{
    "people":       
    {
        <xsl:for-each select="people">
        "name":
            ["
            <xsl:value-of select="people/name"/>
                "]
        </xsl:for-each>
    }
}
</xsl:template>
</xsl:stylesheet>

对于我做错的任何建议表示赞赏。我认为问题是元素的价值,但无法理解问题所在。

2 个答案:

答案 0 :(得分:2)

将第一行添加到source.xml文件中,使其如下所示:

<?xml-stylesheet type="text/xsl" href="converter.xslt" ?>
<people>
  <name>John</name>
</people>

并删除XSLT中的第一行和'name'之前的'people /'引用,以便它看起来像这样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
  {
    "people":       
    {
        <xsl:for-each select="people">
        "name":
            ["
            <xsl:value-of select="name"/>   <!-- REMOVE the 'people' before the 'name' -->
                "]
        </xsl:for-each>
    }
  }
  </xsl:template>
</xsl:stylesheet>

这应该有效。如果您使用浏览器访问

file:///home/path/source.xml

结果是:

{
    "people":       
    {

        "name":
            ["
            John
                "]

    }
}

答案 1 :(得分:0)

我认为,在最终版本中,您将拥有几个名称,例如:

<people>
    <name>John</name>
    <name>George</name>
    <name>Eva</name>
</people>

输出名称列表应为:

  • 将每个名称都用双引号
  • 名称应以逗号分隔,

类似这样的事:[ "John", "George", ... ]

尝试以下XSL:

<?xml version="1.0" encoding="UTF-8" ?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:variable name="names" select="people/name"/>
    <xsl:variable name="separ">", "</xsl:variable>
{
    "people":
    {  
        "name": ["<xsl:value-of select="$names" separator="{$separ}"/>"]
    }
}
  </xsl:template>
</xsl:stylesheet>

然后输出列表符合上述要求。