我想删除一些元素并使用XSLT从xml输入中在Json的输出中交换一些元素
我的输入有效xml文件是:
<items>
<item>
<statement/>
<response/>
<media>
<type>img</type>
<link>SLP.jpg</link>
</media>
</item>
<item>
<statement>walking time bomb.</statement>
<response>
<p>Developing additional problems with your health.</p>
</response>
<media>
<type>html</type>
<link>Brightcove.com%2FZ678766-1.avi</link>
</media>
</item>
</items>
我用作的XSL:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:json="http://json.org/" exclude-result-prefixes="#all">
<xsl:template match="items">
items: [
<xsl:apply-templates/>
]
</xsl:template>
<xsl:template match="item">
{
<xsl:apply-templates/>
},
</xsl:template>
<xsl:template match="statement">
"statement": "<xsl:apply-templates/>"
</xsl:template>
<xsl:template match="response">
"response": "<xsl:apply-templates/>"
</xsl:template>
<xsl:template match="media">
media: {
<xsl:apply-templates/>
}
</xsl:template>
<xsl:template match="type">
"type": "<xsl:apply-templates/>"
</xsl:template>
<xsl:template match="link">
<xsl:text>"link": "files/</xsl:text>
<xsl:value-of select="tokenize(., '/')[last()]"/>"
</xsl:template>
<xsl:template match="p">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
我得到输出json为:
items: [
{
"statement": ""
"response": ""
media: {
"type": "img"
"link": "files/SLP.jpg"
}
},
{
"statement": "walking time bomb."
"response": "Developing additional problems with your health."
media: {
"type": "html"
"link": "files/Brightcove.com%2FZ678766-1.avi"
}
},
但是我需要输出如下所示:
media: {
"type": "img"
"link": "files/SLP.jpg"
}
items: [
{
"statement": "walking time bomb."
"response": "Developing additional problems with your health."
media: {
"type": "html"
"link": "files/Brightcove.com%2FZ678766-1.avi"
}
},
我需要第一个媒体文件(jpg格式)在输出中单独出现,如上所述。请帮我解决这个问题。提前致谢
答案 0 :(得分:2)
如果您希望第一个媒体文件单独出现,则可以通过更改与items
<xsl:template match="items">
<xsl:apply-templates select="item[1]/media" />
items: [
<xsl:apply-templates select="item[position() > 1]"/>
]
</xsl:template>
所有其他模板可以保持不变。