こんにちは私は最近XSLTを使ってxmlファイルにtxtメッセージを分割しますが、xsl:matching-substringを使うと問題が発生します。私は正規表現グループ(n)を数えなければならない。とにかく、私はこれらの方法を単純化することができますか?簡単なmataintain行に一致する部分文字列のXSLT regex-groupを簡略化する方法
私がやっている何本:30本の++ライン
の合計について<xsl:variable name="lineA" as ="xs:string" select="'SAMPLE\+TEXT:1\+((\S+)?):ZZ\+((\S+)?):ZZ\+((\d+)?):((\d+)?)\+((\S+)?)'"/>
<xsl:variable name="lineB" as ="xs:string" select="'SAMPLE\+ALPHA:2\+((\S+)?):ZZ\+((\S+)?):ZZ\+((\d+)?):((\d+)?)\+((\S+)?)'"/>
<xsl:variable name="lineC" as ="xs:string" select="'SAMPLE\+BETA:3\+((\S+)?)\+((\S+)?):ZZ\+((\d+)?):((\d+)?)\+((\S+)?)'"/>
がある
は、このように私が使用します。<xsl:for-each select="$lines">
<xsl:analyze-string select="." flags="x"
regex="({$lineA})\r?\n?({$lineB})?\r?\n?({$lineC})?\r?\n?({$lineD})?\r?\n?({$lineE}).....>
....ライン30までです++
次に、私は:
<xsl:matching-substring>
<line level="0"
variableA="{regex-group(1)}"
variableB="{regex-group(2)"
variableC="{regex=group(3)"
variableD="{regex=group(4)"
これは、維持するのは難しいです正規表現のグループを取得するために30 ++個々の行まで上から下に上記の正規表現をカウントするために私につながる可能性がある。..
にこれを動作するように簡単な方法がありますこのコード行を維持しますか?
簡略化されていますが、完全な入力、希望の出力、現在動作しているXSLTのサンプルを投稿しようとすると役に立ちます。現在のところ、あなたが交換するかどうかはわかりません。 'variable' =" {regex-group(1)} "variableB =" {regex-group(2)} "variableC =" {正規表現グループ(3)} " 'または表現を単純化するための規則 –
最近のバージョンのXSLTプロセッサでは、 'analyze-string'関数を使ってXPath 3.0/3.1をサポートしているので、それをより柔軟に処理できるかもしれません'xsl:analyze-string'の結果よりもXSLT/XPathで処理しやすいXML構造を返す –