【问题标题】:Splitting data by delimiter按分隔符拆分数据
【发布时间】:2013-11-27 18:55:03
【问题描述】:

我记得在 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 />

作为来自&lt;ITA_LIGHT_NAME&gt; 的树,使用类似于Split() 但在XSLT 中的函数。谢谢。

【问题讨论】:

  • - 每个孩子都必须使用-
  • 对于您的输入 XML,这非常困难,尤其是在您不太了解 XSLT 的情况下。 (XSLT 中没有 Split() 函数。)1) 你能对 XML 做些什么吗? 2) 是否可以选择 XSLT 以外的其他语言? 3) 如果您必须使用 XSLT,您使用的是什么 XSLT 引擎(名称和版本)?
  • 只有 xslt 1.0 版,我现在不知道不同的语言。
  • 我指的是 XSLT 引擎,而不是 XSLT 语言版本。我问了不止一个问题。
  • 您需要使用递归模板,如以下重复问题stackoverflow.com/questions/4845660/xsl-how-to-split-strings

标签: xslt xslt-1.0


【解决方案1】:

看想要的输出,不只是拆分的问题……

不过,按照 Matthew Green 的建议编写模板还是可行的。但是,如果您可以访问 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 并将每个由每个元素的特定字符分隔的节点连接成一个字符串,而不是将其发送到 Java将为我返回树的函数。这样,可以更轻松地检查已经存在的 VICINITY 等,并确保您没有重复的节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多