Ответ 1
Опустите запятую из строки внутри for-each
и добавьте:
<xsl:if test="position() != last()">,</xsl:if>
Это добавит запятую для каждого элемента, кроме последнего.
Я пытаюсь написать XSLT, чтобы преобразовать определенную веб-страницу в JSON. Следующий код демонстрирует, как Ruby будет делать это преобразование, но XSLT не генерирует действительный JSON (там слишком много запятых внутри массива). Кто-нибудь знает, как писать XSLT для генерации действительного JSON?
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://bbc.co.uk/radio1/playlist'))
xslt = Nokogiri::XSLT(DATA.read)
puts out = xslt.transform(doc)
# Now follows the XSLT
__END__
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="text" encoding="UTF-8" media-type="text/plain"/>
<xsl:template match="/">
[
<xsl:for-each select="//*[@id='playlist_a']//div[@class='artists_and_songs']//ul[@class='clearme']">
{'artist':'<xsl:value-of select="li[@class='artist']" />','track':'<xsl:value-of select="li[@class='song']" />'},
</xsl:for-each>
]
</xsl:template>
</xsl:stylesheet>
Опустите запятую из строки внутри for-each
и добавьте:
<xsl:if test="position() != last()">,</xsl:if>
Это добавит запятую для каждого элемента, кроме последнего.
Разделение вашего XSLT на отдельные шаблоны может повысить читаемость.
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
>
<xsl:output method="text" encoding="UTF-8" media-type="text/plain"/>
<xsl:template match="/">
<xsl:text>[</xsl:text>
<xsl:apply-templates select="//div[@id='playlist_a']//ul[@class='clearme']" />
<xsl:text>]</xsl:text>
</xsl:template>
<xsl:template match="ul">
<xsl:text>{'artist':'</xsl:text><xsl:value-of select="li[@class='artist']" />
<xsl:text>','track':'</xsl:text><xsl:value-of select="li[@class='song']" />
<xsl:text>'}</xsl:text>
<xsl:if test="position() < last()">,</xsl:if>
</xsl:template>
</xsl:stylesheet>
Кроме того, значения исполнителя и песни могут разорвать ваш JSON, если они содержат одинарные кавычки, может потребоваться замена одиночных кавычек.
Почему бы вам не использовать веб-API элемента Sitecore? Он доступен на SDN и устанавливается как простой плагин. Когда он установлен, вы можете использовать REST для возврата элементов в JSON. Можно искать элементы, и вы можете установить защиту для отдельных полей, доступных через JSON. Далее вы можете создавать, удалять и обновлять элементы Sitecore с помощью REST и JSON.