首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用XSLT 1.0检查前面的元素子串?

如何使用XSLT 1.0检查前面的元素子串?
EN

Stack Overflow用户
提问于 2018-08-03 00:41:31
回答 1查看 69关注 0票数 0

我将为您设置一个示例,让您看到我的:

下面是我的xml:

代码语言:javascript
运行
复制
<object>
   <name>T3-A-blablabla</name>
</object>
<object>
   <name>T3-A-blablabla</name>
</object>
<object>
   <name>T3-B-blablabla</name>
</object>
<object>
   <name>T2-A-blablabla</name>
</object>
<object>
   <name>T2-A-blablabla</name>
</object>

这是我的for-each循环:

代码语言:javascript
运行
复制
<xsl:for-each select="object[not(substring(name, '0', '6') = substring(preceding::object/name, '0', '6'))]">
    <tr><td><xsl:value-of select="name"/></td></tr>
</xsl:for-each>

因此,我只想查找具有不同“类型”(T3-A-、T3-B-、T2-A-等等)的对象。

我的实际循环是这样的:

代码语言:javascript
运行
复制
T3-A-blablabla
T3-B-blablabla
T2-A-blablabla
T2-A-blablabla

但我想要这样:

代码语言:javascript
运行
复制
T3-A-blablabla
T3-B-blablabla
T2-A-blablabla

但是我的循环只排除了第一个对象,就好像前面没有检查所有可能与substring函数冲突的先例对象一样。希望你能帮助我,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-08-03 01:12:00

对于此任务,您必须使用一种名为Muenchian Grouping的技术。

将此设置应用于您的特定问题时,将使用组合键生成以下样式表/模板,在您的示例中,组合键是concat(substring-before(.,'-'),'-',substring-before(substring-after(.,'-'),'-'))

这个组合键将像T3-A-blablabla这样的字符串简化为T3-A,然后在Muenchian设置中用作xsl:key的键。

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0" ...
<xsl:key name="type" match="object" use="concat(substring-before(.,'-'),'-',substring-before(substring-after(.,'-'),'-'))"/> 
...

<xsl:template match="/root">
   <xsl:for-each select="object[generate-id() = generate-id(key('type',concat(substring-before(.,'-'),'-',substring-before(substring-after(.,'-'),'-')))[1])]">
     <tr><td><xsl:value-of select="."/></td></tr>
   </xsl:for-each>
</xsl:template> 

...
</xsl:stylesheet>

当然,您必须用object节点的实际上下文替换match="/root"

输出为

代码语言:javascript
运行
复制
<?xml version="1.0"?>
<tr>
  <td>
   T3-A-blablabla
</td>
</tr><tr>
  <td>
   T3-B-blablabla
</td>
</tr><tr>
  <td>
   T2-A-blablabla
</td>
</tr>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51658550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档