我已经按照输入XML进行操作,并且我正在尝试逐个逻辑地实现。问题是它正在重复输入的值"组"两个"组中的标签"结果中的标签。我正在使用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>`
答案 0 :(得分:1)
使用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>
答案 1 :(得分:0)
在此代码中
<xsl:template match="//jsonObject/alarm">
<cdm:Alarm>
<cdm:Groups>
<xsl:for-each-group select="//jsonObject/alarm" group-by="groups">
你说&#34;每当我遇到警报时,我都想处理所有警报&#34;。因此,您在输出中获得重复数据并不奇怪。