我希望前两个数字必须在不同的标签中,最后两个使用XSLT

时间:2017-01-04 10:19:37

标签: json xml xslt

我有4个连续数字,前两个数字必须带有文本标签,最后两个数字带有字幕标记,使用XSLT,

我的输入XML文件是:

<images>
<image>
<url>insulin.jpg</url>
<caption>Caption Fig – Text Here</caption>
</image>
<image>
<url>medicine.jpg</url>
<caption>Caption Fig – Text Here</caption>
</image>
<image>
<url>power.jpg</url>
<caption>Caption Fig – Text Here</caption>
</image>
<image>
<url>injection.jpg</url>
<caption>Caption Fig – Text Here</caption>
</image>
</images>

我用的XSLT:

<xsl:stylesheet version="3.0">

<xsl:template match="images">
images: [
<xsl:apply-templates/>
]
</xsl:template>

<xsl:template match="images/image">
<xsl:if test="position() != 1">,</xsl:if>
{
<xsl:apply-templates/>
}
</xsl:template>

<xsl:template match="image/url">
    <xsl:text>"url": "img/</xsl:text>
    <xsl:value-of select="tokenize(., '/')[last()]"/>",
</xsl:template>

<xsl:template match="image/caption">
    "caption": "<xsl:apply-templates/>",
</xsl:template>

</xsl:stylesheet>

我的输出为:

images: [

    {
    "url": "img/insulin.jpg",

    "caption": "Caption Fig – Text Here",

    }
,
    {
    "url": "img/medicine.jpg",

    "caption": "Caption Fig – Text Here",

    }
,
    {
    "url": "img/power.jpg",

    "caption": "Caption Fig – Text Here",

    }
,
    {
    "url": "img/injection.jpg",

    "caption": "Caption Fig – Text Here",

    }

    ]

但我希望前两张图片需要附带文字标签和标题,最后两张图片保持相同

预期的Json输出:

images: [

    {
    "url": "img/insulin.jpg",

    "caption": {

    "text": "Caption Fig – Text Here",

    }

    }
,
    {
    "url": "img/medicine.jpg",

    "caption": {

    "text": "Caption Fig – Text Here",

    }

    }
,
    {
    "url": "img/power.jpg",

    "caption": "Caption Fig – Text Here",

    }
,
    {
    "url": "img/injection.jpg",

    "caption": "Caption Fig – Text Here",

    }

    ]

请帮我解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是添加更高优先级的模板,以匹配在选定的前两个<s:Envelope> <xsl:attribute name="xmlns:s"><xsl:value-of select="xmlns:soapenv"/></xsl:attribute> <s:Body> </s:Body> </s:Envelope> 元素下出现的caption元素

image

为了实现这一点,您应该更改匹配<xsl:template match="image[position() &lt;= 2]/caption" priority="2"> "text": "<xsl:apply-templates/>", </xsl:template> 的模板中的<xsl:apply-templates/>,以明确选择images元素

image

这是因为它可能会拾取空白节点,并影响新模板中的位置检查(因为position()指的是所选节点集中的位置,不一定是文档中的位置)。

试试这个XSLT

<xsl:template match="images">
images: [
<xsl:apply-templates select="image" />
]
</xsl:template>