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

时间:2018-08-02 16:41:31

标签: html xml xslt-1.0

我将为您提供一个查看我的示例:

这是我的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

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

1 个答案:

答案 0 :(得分:0)

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

组合键将类似T3-A-blablabla的字符串还原为T3-A,然后在xsl:key中将其用作<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> key Muenchian 设置。

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>
输出是

def corr_df(x, corr_val):
    '''
    Obj: Drops features that are strongly correlated to other features.
          This lowers model complexity, and aids in generalizing the model.
    Inputs:
          df: features df (x)
          corr_val: Columns are dropped relative to the corr_val input (e.g. 0.8)
    Output: df that only includes uncorrelated features
    '''

    # Creates Correlation Matrix and Instantiates
    corr_matrix = x.corr()
    iters = range(len(corr_matrix.columns) - 1)
    drop_cols = []

    # Iterates through Correlation Matrix Table to find correlated columns
    for i in iters:
        for j in range(i):
            item = corr_matrix.iloc[j:(j+1), (i+1):(i+2)]
            col = item.columns
            row = item.index
            val = item.values
            if abs(val) >= corr_val:
                # Prints the correlated feature set and the corr val
                print(col.values[0], "|", row.values[0], "|", round(val[0][0], 2))
                drop_cols.append(i)

    drops = sorted(set(drop_cols))[::-1]

    # Drops the correlated columns
    for i in drops:
        col = x.iloc[:, (i+1):(i+2)].columns.values
        x = x.drop(col, axis=1)
    return x