我试图过滤特定的字段,并在另一个字段上连接:
输入:
<?xml version="1.0" encoding="UTF-8"?> <payloads> <payload> <firstname>michael</firstname> <secondname>brown</secondname> <number>1</number> </payload> <payload> <firstname>michael</firstname> <secondname>brown</secondname> <number>2</number> </payload> <payload> <firstname>michael</firstname> <secondname>brown</secondname> <number>3</number> </payload> </payloads>
输出:
<?xml version="1.0" encoding="UTF-8"?> <payloads> <payload> <firstname>michael</firstname> <secondname>brown</secondname> <number>1,2,3</number> </payload> </payloads>
我知道我需要遍历每个有效负载标签,但目前我无法正确输出它.目前我有这个:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="payloads"> <xsl:copy> <xsl:for-each select="payload"> <payload> <xsl:value-of select="firstname"/> <xsl:value-of select="secondname"/> <xsl:value-of select="number"/> </payload> </xsl:for-each> </xsl:copy> </xsl:template> </xsl:stylesheet>
解决方法
使用此模板:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="k" match="payload" use="concat(firstname,'|',secondname)"/> <xsl:template match="payload[generate-id() = generate-id(key('k',concat(firstname,secondname)))]"> <xsl:copy> <xsl:copy-of select="firstname"/> <xsl:copy-of select="secondname"/> <number> <xsl:for-each select="key('k',secondname))"> <xsl:value-of select="number"/> <xsl:if test="position() != last()"> <xsl:text>,</xsl:text> </xsl:if> </xsl:for-each> </number> </xsl:copy> </xsl:template> <xsl:template match="payload"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
当应用于提供的输入XML时,它输出想要的正确结果:
<payloads> <payload> <firstname>michael</firstname> <secondname>brown</secondname> <number>1,3</number> </payload> </payloads>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。