如何从XML中选择前3个标签并循环直到XML结束?
前三个标签代表一个信息块,其次是另一个信息
FYI,其XSLT 2.0
请注意,输入的XML可能包含6条以上的记录。 输入XML
<tokens>
<token>"lvs1-001"</token>
<token>"Deleted"</token>
<token>"101.34.76.84"</token>
<token>"lvs1-002"</token>
<token>"Deleted"</token>
<token>"101.62.93.75"</token>
</tokens>
预期之一:
<xml>
<tokens>
<token>lvs1-001</token>
<token>Deleted</token>
<token>101.34.76.84</token>
</tokens>
<tokens>
<token>lvs1-002</token>
<token>Deleted</token>
<token>101.62.93.75</token>
</tokens>
<tokens>
</tokens>
<tokens>
</tokens>
</xml>
答案 0 :(得分:0)
在 XSLT 2.0 中这很简单:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/tokens">
<xml>
<xsl:for-each-group select="token" group-by="(position()-1) idiv 3">
<tokens>
<xsl:copy-of select="current-group()" />
</tokens>
</xsl:for-each-group>
</xml>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:-1)
根据以下输入:
<tokens>
<token>"lvs1-001"</token>
<token>"Deleted"</token>
<token>"101.34.76.84"</token>
<token>"lvs1-002"</token>
<token>"Deleted"</token>
<token>"101.62.93.75"</token>
</tokens>
用于创建所需输出的代码:
<xml>
<tokens>
<xsl:for-each select="tokens/token">
<xsl:choose>
<xsl:when test="position() <= 3">
<token><xsl:value-of select="normalize-space(.)" /></token>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</tokens>
<tokens>
<xsl:for-each select="tokens/token">
<xsl:choose>
<xsl:when test="position() > 3">
<token><xsl:value-of select="normalize-space(.)" /></token>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</tokens>
</xml>
结果:
<xml>
<tokens>
<token>"lvs1-001"</token>
<token>"Deleted"</token>
<token>"101.34.76.84"</token>
</tokens>
<tokens>
<token>"lvs1-002"</token>
<token>"Deleted"</token>
<token>"101.62.93.75"</token>
</tokens>