我正在XSLT中进行for-each
循环,并且它返回一个长字符串。我想要做的是解析字符串。
这是代码。
<xsl:for-each select="/CAudioFile/CRI/PrivateData/PrivateData/DictionaryEntry">
<xsl:value-of select="Value" />
</xsl:for-each>
这是它返回的字符串:
9702195481, 31201(CCC AGENT)09999051221399561274822396000069522
我想要做的是将第一部分放在一个变量中:
9702195481, 31201(CCC AGENT)
并用分号替换逗号。
第二个字符串从第一个字符串的末尾开始,它是20个字符。所以它会返回
09999051221399561274
我试过substring
,但是我遇到了编译错误。
关于如何实现这一目标的任何建议?
这是源xml和xslt文件。
这里'屏幕截图显示了它现在的样子和我想要的格式。
我实际上更喜欢这个来生成CSV,但是我的格式不正确就是为什么我坚持使用HTML。
答案 0 :(得分:2)
如果您不希望以一个长字符串连接所有DictionaryEntry / Values,那么请不要这样做:
<td>
<xsl:for-each select="CAudioFile/CRI/PrivateData/PrivateData/DictionaryEntry">
<xsl:value-of select="Value" />
</xsl:for-each>
</td>
尝试改为:
<td>
<xsl:value-of select="translate(CAudioFile/CRI/PrivateData/PrivateData/DictionaryEntry[1]/Value, ',', ';')" />
<xsl:value-of select="CAudioFile/CRI/PrivateData/PrivateData/DictionaryEntry[2]/Value" />
</td>
或者也许:
<td>
<xsl:value-of select="translate(CAudioFile/CRI/PrivateData/PrivateData/DictionaryEntry[Key='CD1']/Value, ',', ';')" />
<xsl:value-of select="CAudioFile/CRI/PrivateData/PrivateData/DictionaryEntry[Key='CD2']/Value" />
</td>
答案 1 :(得分:0)
此XPath表达式将提取字符串的第一部分,如果,您可以将)
视为分隔符(它不会出现在候选字符串中的任何其他位置):< / p>
concat(translate(substring-before('9702195481, 31201(CCC ...', ')'),',',';'),')')
这个将获得第二部分的前20个字符:
substring(substring-after('9702195481, 31201(CCC ...', ')'),1,20)
您可以在<xsl:value-of select="">
中使用这些内容并将其放在<xsl:variable>
内以将其保存在变量中:
<xsl:for-each select="/CAudioFile/CRI/PrivateData/PrivateData/DictionaryEntry">
<xsl:variable name="first">
<xsl:value-of select="concat(translate(substring-before(., ')'),',',';'),')')" />
</xsl:variable>
<xsl:variable name="second">
<xsl:value-of select="substring(substring-after(., ')'),1,20)" />
</xsl:variable>
<first-part><xsl:value-of select="$first" /></first-part>
<second-part><xsl:value-of select="$second" /></second-part>
</xsl:for-each>
假设您提供的示例字符串
9702195481, 31201(CCC AGENT)09999051221399561274822396000069522
是for-each
中的上下文节点的值(对于某个迭代),它将打印出来:
<first-part>9702195481; 31201(CCC AGENT)</first-part>
<second-part>09999051221399561274</second-part>
您可以在 xslt fiddle
中验证此转化