获取XSLT2.0中每5个字符元素的最大出现次数
我需要每5个字符获得元素的最大迭代次数(ex为15次迭代)。例如,我在下面有一个xml文件: 输入文件:获取XSLT2.0中每5个字符元素的最大出现次数,xslt,xslt-2.0,Xslt,Xslt 2.0,我需要每5个字符获得元素的最大迭代次数(ex为15次迭代)。例如,我在下面有一个xml文件: 输入文件: <Record> <AAA>1DFAHSDJFOHR79324325Y49HRFDSHFADSLFJOSDHFDFASNDFAEJRO3U023U4EWR3454433FGSDG46244SDG6409876</AAA> </Record> <Record> <Data>1DFAH</Data> <D
<Record>
<AAA>1DFAHSDJFOHR79324325Y49HRFDSHFADSLFJOSDHFDFASNDFAEJRO3U023U4EWR3454433FGSDG46244SDG6409876</AAA>
</Record>
<Record>
<Data>1DFAH</Data>
<Data>SDJFO</Data>
<Data>HR793</Data>
<Data>24325</Data>
<Data>Y49HR</Data>
<Data>FDSHF</Data>
<Data>ADSLF</Data>
<Data>JOSDH</Data>
<Data>FDFAS</Data>
<Data>NDFAE</Data>
<Data>JRO3U</Data>
<Data>023U4</Data>
<Data>EWR34</Data>
<Data>54433</Data>
<Data>FGSDG</Data>
</Record>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="AAA">
<Record>
<xsl:analyze-string regex=".{{5}}" select=".">
<xsl:matching-substring>
<Data>
<xsl:value-of select="."/>
</Data>
</xsl:matching-substring>
<xsl:non-matching-substring>
<Data>
<xsl:value-of select="."/>
</Data>
</xsl:non-matching-substring>
</xsl:analyze-string>
</Record>
</xsl:template>
1DFAHSDJFOHR79324325Y49HRFDSHFADSLFJOSDHFFASNDFAEJRO3U023U4EWR3454433FGSDG46244SDG6409876
预期输出:
<Record>
<AAA>1DFAHSDJFOHR79324325Y49HRFDSHFADSLFJOSDHFDFASNDFAEJRO3U023U4EWR3454433FGSDG46244SDG6409876</AAA>
</Record>
<Record>
<Data>1DFAH</Data>
<Data>SDJFO</Data>
<Data>HR793</Data>
<Data>24325</Data>
<Data>Y49HR</Data>
<Data>FDSHF</Data>
<Data>ADSLF</Data>
<Data>JOSDH</Data>
<Data>FDFAS</Data>
<Data>NDFAE</Data>
<Data>JRO3U</Data>
<Data>023U4</Data>
<Data>EWR34</Data>
<Data>54433</Data>
<Data>FGSDG</Data>
</Record>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="AAA">
<Record>
<xsl:analyze-string regex=".{{5}}" select=".">
<xsl:matching-substring>
<Data>
<xsl:value-of select="."/>
</Data>
</xsl:matching-substring>
<xsl:non-matching-substring>
<Data>
<xsl:value-of select="."/>
</Data>
</xsl:non-matching-substring>
</xsl:analyze-string>
</Record>
</xsl:template>
1DFAH
SDJFO
HR793
24325
Y49HR
FDSHF
ADSLF
乔斯德
FDFA
NDFAE
JRO3U
023U4
EWR34
54433
FGSDG
XSLT代码:
<Record>
<AAA>1DFAHSDJFOHR79324325Y49HRFDSHFADSLFJOSDHFDFASNDFAEJRO3U023U4EWR3454433FGSDG46244SDG6409876</AAA>
</Record>
<Record>
<Data>1DFAH</Data>
<Data>SDJFO</Data>
<Data>HR793</Data>
<Data>24325</Data>
<Data>Y49HR</Data>
<Data>FDSHF</Data>
<Data>ADSLF</Data>
<Data>JOSDH</Data>
<Data>FDFAS</Data>
<Data>NDFAE</Data>
<Data>JRO3U</Data>
<Data>023U4</Data>
<Data>EWR34</Data>
<Data>54433</Data>
<Data>FGSDG</Data>
</Record>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="AAA">
<Record>
<xsl:analyze-string regex=".{{5}}" select=".">
<xsl:matching-substring>
<Data>
<xsl:value-of select="."/>
</Data>
</xsl:matching-substring>
<xsl:non-matching-substring>
<Data>
<xsl:value-of select="."/>
</Data>
</xsl:non-matching-substring>
</xsl:analyze-string>
</Record>
</xsl:template>
我只需要得到数据的第15次迭代之前的值,忽略多余的值。如何在xslt中实现这一点
谢谢。试试这个:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="AAA">
<Record>
<!-- Assing all in a Variable -->
<xsl:variable name="DATA">
<xsl:analyze-string regex=".{{5}}" select=".">
<xsl:matching-substring>
<Data>
<xsl:value-of select="."/>
</Data>
</xsl:matching-substring>
<xsl:non-matching-substring>
<Data>
<xsl:value-of select="."/>
</Data>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:variable>
<!-- Copy only first Fifteen Occurances -->
<xsl:copy-of select="$DATA//Data[position() lt 16]"/>
</Record>
</xsl:template>
</xsl:stylesheet>
输出
<Record>
<Data>1DFAH</Data>
<Data>SDJFO</Data>
<Data>HR793</Data>
<Data>24325</Data>
<Data>Y49HR</Data>
<Data>FDSHF</Data>
<Data>ADSLF</Data>
<Data>JOSDH</Data>
<Data>FDFAS</Data>
<Data>NDFAE</Data>
<Data>JRO3U</Data>
<Data>023U4</Data>
<Data>EWR34</Data>
<Data>54433</Data>
<Data>FGSDG</Data>
</Record>
1DFAH
SDJFO
HR793
24325
Y49HR
FDSHF
ADSLF
乔斯德
FDFA
NDFAE
JRO3U
023U4
EWR34
54433
FGSDG
进一步扩展您的解决方案,您可以将分析字符串
的输出存储到变量中,例如拆分数组
<xsl:variable name="strValue" select="AAA" />
<xsl:variable name="splitArray">
<xsl:analyze-string regex=".{{5}}" select="$strValue">
<xsl:matching-substring>
<Data><xsl:value-of select="."/></Data>
</xsl:matching-substring>
<xsl:non-matching-substring>
<Data><xsl:value-of select="."/></Data>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:variable>
下面是完整的XSLT供您参考
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="Record">
<xsl:copy>
<xsl:variable name="strValue" select="AAA" />
<xsl:variable name="splitArray">
<xsl:analyze-string regex=".{{5}}" select="$strValue">
<xsl:matching-substring>
<Data><xsl:value-of select="."/></Data>
</xsl:matching-substring>
<xsl:non-matching-substring>
<Data><xsl:value-of select="."/></Data>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:variable>
<xsl:for-each select="$splitArray/Data[position() < 16]">
<Data><xsl:value-of select="." /></Data>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
希望这有帮助。我不知道如何得到不匹配的字符串。对于前15个匹配项,
position()
可用,请参见其中的说明:“匹配和非匹配子字符串序列中的子字符串位置将是上下文位置”。因此,您可以检查它:
<xsl:template match="AAA">
<Record>
<xsl:analyze-string regex=".{{5}}" select=".">
<xsl:matching-substring>
<xsl:if test="position() le 15">
<Data>
<xsl:value-of select="."/>
</Data>
</xsl:if>
</xsl:matching-substring>
</xsl:analyze-string>
</Record>
</xsl:template>