[英]XSLT 2.0 group by function showing repeating values in tag
我已经遵循了输入XML,并且正在尝试按逻辑实现分组。 问题是它在结果的两个“ groups”标签中重复输入“ groups”标签的值。我正在使用xslt 2.0。
输入XML:
<?xml version="1.0"?><?xml-stylesheet type="text/xsl"?>
<jsonObject>
<alarm>
<groups>1</groups>
<groups>2</groups>
<typeKey>FIRE</typeKey>
<longitude>0</longitude>
<victim>2</victim>
<letitude>0</letitude>
</alarm>
<token>{CE541}</token>
</jsonObject>
输入XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cdm="http://com.example/abc/current/data"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="//jsonObject/alarm">
<cdm:Alarm>
<cdm:Groups>
<xsl:for-each-group select="//jsonObject/alarm" group-by="groups">
<cdm:Group>
<xsl:value-of select="groups"/> </cdm:Group>
</xsl:for-each-group>
</cdm:Groups>
<cdm:Latitude><xsl:value-of select="letitude"/></cdm:Latitude>
<cdm:Longitude><xsl:value-of select="longitude"/></cdm:Longitude>
<cdm:TypeKey><xsl:value-of select="typeKey"/></cdm:TypeKey>
<cdm:Victim><xsl:value-of select="victim"/></cdm:Victim>
</cdm:Alarm>
<cdm:Token><xsl:value-of select="token"/></cdm:Token>
</xsl:template>
</xsl:stylesheet>
当前结果:
<?xml version="1.0" encoding="UTF-8"?>
<cdm:Alarm xmlns:cdm="http://com.example/abc/current/data"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<cdm:Groups>
<cdm:Group>1 2</cdm:Group>
<cdm:Group>1 2</cdm:Group>
</cdm:Groups>
<cdm:Latitude>0</cdm:Latitude>
<cdm:Longitude>0</cdm:Longitude>
<cdm:TypeKey>FIRE</cdm:TypeKey>
<cdm:Victim>2</cdm:Victim>
</cdm:Alarm>
<cdm:Token xmlns:cdm="http://com.example/abc/current/data"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
{CE541}`</cdm:Token>`
预期结果:
<?xml version="1.0" encoding="UTF-8"?>
<cdm:Alarm xmlns:cdm="http://com.example/abc/current/data"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<cdm:Groups>
<cdm:Group>1</cdm:Group>
<cdm:Group>2</cdm:Group>
</cdm:Groups>
<cdm:Latitude>0</cdm:Latitude>
<cdm:Longitude>0</cdm:Longitude>
<cdm:TypeKey>FIRE</cdm:TypeKey>
<cdm:Victim>2</cdm:Victim>
</cdm:Alarm>
<cdm:Token xmlns:cdm="http://com.example/abc/current/data"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
{CE541}`</cdm:Token>`
使用current-grouping-key()
代替如下:
<xsl:for-each-group select="//jsonObject/alarm" group-by="groups">
<cdm:Group>
<xsl:value-of select="current-grouping-key()"/>
</cdm:Group>
</xsl:for-each-group>
在这段代码中
<xsl:template match="//jsonObject/alarm">
<cdm:Alarm>
<cdm:Groups>
<xsl:for-each-group select="//jsonObject/alarm" group-by="groups">
您说的是“每次遇到警报,我都想处理所有警报”。 因此,在输出中得到重复的数据也就不足为奇了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.