以下是xslt的输入
<docValues>
01|1596056|CCCCCCCCCDD|028571|ABCCHAS|29150699|150800|FFSSSSFFFF|005| |N|N|002| | |0000020319|29150699|163000|29150699|153100|666666|20140627|400|RRRRR|400| |20150701
02|1596056|028571|29150699|0001|400| | |0001|THIS IS MY SERVICE,,| | | |0901.99| |0.5|
03|1596056|028571|29150699|0001|5103|29150699|29150699| |1.000|99.098| |
<docValues>
Below are the details of xml input
01 : First Line Number
02 : Second Line Number
03 : Third Line Number
XSLT应该读取xml
下的输入xml和outout<SO>
<line01_2nd_token>1596056</line01_2nd_token>
<line01_4th_token>028571</line01_4th_token>
<line01_5th_token>ABCCHAS</line01_4th_token>
<SO>
<PARIS>
<line01_4th_token>028571</line01_4th_token>
<line02_5th_token>0001</line02_5th_token>
<line03_11th_token>99.098</line03_11th_token>
</PARIS>
<MY_SERVICE>
<line01_4th_token>028571</line01_4th_token>
<line03_5th_token>0001</line02_5th_token>
<line02_6th_token>400</line02_6th_token>
</MY_SERVICE>
要实现上述输出:输入xml中的行(01,02,03)需要分解为令牌作为分隔符,以便我可以在相应的行(01,02,03)中读取所需的标记值
所以我的问题是如何将输入xml分解为令牌并读取令牌值。
有没有办法实现所需的输出
请帮我解决这个问题
答案 0 :(得分:0)
好吧,有一个函数tokenize
可以使用两次,首先使用第二个参数'\r?\n'
来查找行,然后你可以对'\|'
上的每一行进行标记。
这是一个提取一些令牌的示例,您应该能够自己完成:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="docValues">
<xsl:variable name="lines" select="tokenize(., '\r?\n')[normalize-space()]"/>
<xsl:variable name="line1-tokens" select="tokenize($lines[1], '\|')"/>
<SO>
<line01_2nd_token><xsl:value-of select="$line1-tokens[2]"/></line01_2nd_token>
</SO>
<PARIS>
<line01_4th_token><xsl:value-of select="$line1-tokens[4]"/></line01_4th_token>
</PARIS>
<MY_SERVICE>
<line01_4th_token><xsl:value-of select="$line1-tokens[4]"/></line01_4th_token>
</MY_SERVICE>
</xsl:template>
</xsl:stylesheet>