您好,我最近使用XSLT将txt消息拆分成xml文件,但是当我使用xsl:matching-substring时出现了问题,因为太多的regex,我必须计算regex-group(n)。有没有什么办法可以简化这些方法呢?
这就是我要做的:
<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+)?)'"/>总共大约有30++行
因此,我使用:
<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++单个行,以获得很难维护的regex-group。
有没有更简单的方法来解决这个问题来维护这几行代码?
发布于 2017-05-12 22:17:07
我发现将处理过程分解成较小的步骤通常会有所帮助。
在我看来,您的输入由许多行组成,并且您希望使用不同的逻辑处理每一行。
因此,首先使用一个简单的tokenize($input, '\r?\n')拆分成几行;然后可能将这些行绑定到变量,比如
<xsl:variable name="lineC" select="$tokens[3]"/>然后用它自己的正则表达式处理每一行。
https://stackoverflow.com/questions/43927869
复制相似问题