xml - 如何拆分字符串并删除重复和连接字符串的第二部分
问题描述
我试图在 XSLT 中拆分以下字符串并删除重复项并以下列方式连接字符串的第二部分。
<items>Vegetable|tomoto|,vegetable|potato,fruit|apple,fruit|orange,fruit|kiwi</items>
我可以用“,”和“|”分割 并创建单独的标签,但我需要通过删除重复的“蔬菜”和“水果”来创建具有以下格式的 xml
预期结果
<category>vegetables</category>
<subcategory>tomoto,potato</subcategory>
<category>fruits</category>
<subcategory>apple,orange,kiwi</subcategory>
谢谢拉胡尔人力资源
解决方案
假设您的输入实际上看起来更像:
<items>vegetable|tomato,vegetable|potato,fruit|apple,fruit|orange,fruit|kiwi</items>
(即使用相同的字母大小写列出的所有类别,并且没有多余的分隔符)并且您的处理器支持 XSLT 2.0,您可以使用以下方法获得预期结果:
<xsl:for-each-group select="tokenize(items, ',')" group-by="substring-before(., '|')">
<category>
<xsl:value-of select="current-grouping-key()"/>
</category>
<subcategory>
<xsl:value-of select="for $str in current-group() return substring-after($str, '|')" separator=","/>
</subcategory>
</xsl:for-each-group>
或者,如果您愿意:
<xsl:variable name="items">
<xsl:for-each select="tokenize(items, ',')">
<item cat="{substring-before(., '|')}">
<xsl:value-of select="substring-after(., '|')"/>
</item>
</xsl:for-each>
</xsl:variable>
<xsl:for-each-group select="$items/item" group-by="@cat">
<category>
<xsl:value-of select="current-grouping-key()"/>
</category>
<subcategory>
<xsl:value-of select="current-group()" separator=","/>
</subcategory>
</xsl:for-each-group>
请注意,结果不会将类别和子类别组合在一起。
推荐阅读
- java - java 8 新的日期/时间 API 获取一年中的第一天
- c - 求平均数的C程序
- amazon-web-services - 如何使用 AWS Lambda 读取 S3 中的 csv 并将记录数输出到 HTML?
- protocol-buffers - 如何正确地将嵌套的 protobuf 模式传递给融合模式注册表?
- go - 带时间的 Golang 协程
- rust - 带有 str 键的 HashMap 的 Rust lang 生命周期不匹配
- windows-10 - 我在Windows 10中安装了Odoo 13,突然出现“无法显示所选图像”。我如何解决它?
- context-free-grammar - 递归文法可以有 LR(0) 状态吗?
- javascript - 多链接的 JS 函数
- oracle - 甲骨文。如何按值阈值对数据进行分组