通过分隔符拆分数据

时间:2013-11-14 16:35:26

标签: xslt xslt-1.0

我记得在Visual Basic中存在一个函数Split(),它将字符串除以特定字符。

现在我在XSLT编程,我想使用类似的功能,但我不太了解XSLT。

在附件中我输入了xml代码:

<SECTION_CONTENT_LIST_ITEM>
    <NTC_LIGHTLISTPRODUCT>
        <VICINITY>TARANTO</VICINITY>
        <ITA_LIGHT_NAME>Porto industriale esterno;Meda elastica</ITA_LIGHT_NAME>
    </NTC_LIGHTLISTPRODUCT>
</SECTION_CONTENT_LIST_ITEM>
<SECTION_CONTENT_LIST_ITEM>
    <NTC_LIGHTLISTPRODUCT>
        <VICINITY>TARANTO</VICINITY>
        <ITA_LIGHT_NAME>Porto industriale esterno;Meda elastica</ITA_LIGHT_NAME>
    </NTC_LIGHTLISTPRODUCT>
</SECTION_CONTENT_LIST_ITEM>
<SECTION_CONTENT_LIST_ITEM>
    <NTC_LIGHTLISTPRODUCT>
        <VICINITY>TARANTO</VICINITY>
        <ITA_LIGHT_NAME>Porto industriale esterno;Meda elastica</ITA_LIGHT_NAME>
    </NTC_LIGHTLISTPRODUCT>
</SECTION_CONTENT_LIST_ITEM>
<SECTION_CONTENT_LIST_ITEM>
    <NTC_LIGHTLISTPRODUCT>
        <VICINITY>TARANTO</VICINITY>
        <ITA_LIGHT_NAME>MAR GRANDE;Porto industriale interno;Accesso al IV sporgente;All 341;Radice IV sporgente (Ant)</ITA_LIGHT_NAME>
    </NTC_LIGHTLISTPRODUCT>
</SECTION_CONTENT_LIST_ITEM>
<SECTION_CONTENT_LIST_ITEM>
    <NTC_LIGHTLISTPRODUCT>
        <VICINITY>TARANTO</VICINITY>
        <ITA_LIGHT_NAME>MAR GRANDE;Porto industriale interno;Accesso al IV sporgente;All 341;Circa 700 m a NNW dell'Ant(Post)</ITA_LIGHT_NAME>
    </NTC_LIGHTLISTPRODUCT>
</SECTION_CONTENT_LIST_ITEM>

我想看看:

TARANTO
<br />
Porto industriale esterno
-Meda elastica
-Meda elastica
-Meda elastica
<br />
Mar Grande
-Porto industriale interno
--Accesso al IV sporgente
---All 341
----Radice IV sporgente (Ant)
----Circa 700 m a NNW dell'Ant(Post)
<br />

作为来自<ITA_LIGHT_NAME>的树,使用类似于Split()但在XSLT中的函数。感谢。

1 个答案:

答案 0 :(得分:0)

查看所需的输出,这不仅仅是分裂......

尽管如此,按照马修格林的建议写一个模板也行得通。但是,如果您可以访问Java,则调用外部Java函数会更容易。

public String splitString(String myStringToSplit, String delimiter)
{
    String[] mySplittedString = myStringToSplit.split(delimiter);
    String returnString = "";

    for(int i = 0; i < mySplittedString.length; i++)
    {
        returnString += mySplittedString[i] + "<br/>";
    }

    return returnString;
}

在XSLT中,声明了java命名空间后:

<xsl:value-of select="namespace:splitString('your;String;To;Split', ';')"/>

这与XSLT 1.0完全兼容。

现在为了得到你想要的输出,再次因为这是一个太复杂的XSLT算法,我会解析整个XML,并将每个元素分隔的每个节点的每个节点连接成一个String,而不是将它发送给Java将为我返回树的功能。这样,您可以更轻松地检查现有的VICINITY等,并确保您没有重复的节点。