【问题标题】:How to check for preceding substring of elements with XSLT 1.0?如何使用 XSLT 1.0 检查元素的前面子字符串?
【发布时间】:2018-08-02 16:41:30
【问题描述】:

我给你举个例子,让你看看我的:

这是我的 xml:

<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 循环:

<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- 等等..)。

我的实际循环给了我这个:

T3-A-blablabla
T3-B-blablabla
T2-A-blablabla
T2-A-blablabla

但我想要这个:

T3-A-blablabla
T3-B-blablabla
T2-A-blablabla

但是我的循环只排除了第一个对象,好像之前没有检查所有可能与子字符串函数冲突的先前对象。 希望你能帮助我,谢谢。

【问题讨论】:

    标签: html xml xslt-1.0


    【解决方案1】:

    对于这项任务,您必须使用一种称为Muenchian Grouping 的技术。
    应用于您的特定问题设置,这将使用 composite key 生成以下样式表/模板,在您的情况下为concat(substring-before(.,'-'),'-',substring-before(substring-after(.,'-'),'-'))

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

    <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>
    

    当然,您必须将 match="/root" 替换为 object 节点的实际上下文。
    输出是

    <?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>
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2021-10-10
      • 2021-07-19
      • 2011-03-07
      相关资源
      最近更新 更多