我必須採取XML數據饋送並將其轉換爲json,展平,以便我沒有json對象。除了多次出現的元素外,我的工作都有效,我得到了多次出現。我明白爲什麼apply-templates命令發生這種情況,我不知道如何解決這個問題。XSLT過程第一次出現元素
原始XML如下所示:
<entry>
<id>542345255</id>
<published>2013-10-15T15:30:02Z</published>
<link rel="alternate" type="text/html" href="http://test.com"/>
<link rel="self" type="application/json" href="http://test1.com"/>
</entry>
期望得到的結果是:
{
"id" : "542345255",
"published" : "2013-10-15T15:30:02Z",
"link_rel" : "[alternate, self]",
"link_type" : "[text/html, application/json]",
"link_href" : "[http://test.com, http://test1.com]"
}
我的XSLT是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:variable name="links" select="entry/link"/>
<xsl:template match="entry">
<xsl:text>{</xsl:text>
<xsl:apply-templates/>
<xsl:text>}</xsl:text>
</xsl:template>
<xsl:template match="id">
<xsl:text>"id" : "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>", </xsl:text>
</xsl:template>
<xsl:template match="published">
<xsl:text>"postedTime" : "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>", </xsl:text>
</xsl:template>
<xsl:template match="link">
<xsl:text>"link_rel" : "[</xsl:text>
<xsl:for-each select="$links">
<xsl:value-of select="./@rel"/>
<xsl:if test="position()!=last()">, </xsl:if>
</xsl:for-each>
<xsl:text>]", </xsl:text>
<xsl:text>"link_type" : "[</xsl:text>
<xsl:for-each select="$links">
<xsl:value-of select="./@type"/>
<xsl:if test="position()!=last()">, </xsl:if>
</xsl:for-each>
<xsl:text>]", </xsl:text>
<xsl:text>"link_href" : "[</xsl:text>
<xsl:for-each select="$links">
<xsl:value-of select="./@href"/>
<xsl:if test="position()!=last()">, </xsl:if>
</xsl:for-each>
<xsl:text>]", </xsl:text>
</xsl:template>
</xsl:stylesheet>
有了這個,結果我得到是:
{
"id" : "542345255",
"published" : "2013-10-15T15:30:02Z",
"link_rel" : "[alternate, self]",
"link_type" : "[text/html, application/json]",
"link_href" : "[http://test.com, http://test1.com]"
"link_rel" : "[alternate, self]",
"link_type" : "[text/html, application/json]",
"link_href" : "[http://test.com, http://test1.com]"
}
http://www.bramstein.com/projects/xsltjson/conf/xml-to-jsonml.xsl – Wrikken