3

Split()Visual Basicには、文字列を特定の文字で除算する関数が存在することを覚えています。

現在、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 />

XSLT に<ITA_LIGHT_NAME>類似した関数を使用してツリーとして。Split()ありがとう。

4

1 に答える 1

0

目的の出力を見ると、分割の問題だけではありません...

それでも、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 全体を解析し、各要素の特定の char で区切られた各ノードを 1 つの String に連結します。Java 関数に送信するよりも、私のために木を返してください。このようにして、既存の VICINITY などを簡単に確認し、ノードが重複していないことを確認できます。

于 2014-09-21T15:05:57.023 に答える