如何使用Java中的xslt从纯文本中读取所有数据?

时间:2015-03-17 22:30:23

标签: java xml xslt

我有以下文本文件(.txt):

IT000000000000000545Panquecitos 2 100gr BIM OLA
IT000000000000000797Dalmata 45g MLA
IT000000000000001782Quequito max 80g Arrorico BIM

我读了我的文件并得到了一个XML,但我的代码只读取了第一行,我需要读取所有数据。例如:

<items>
   <item>
      <nick>IT</nick>
      <num>000000000000000545</nick>
      <desc>Panquecitos 2 100gr BIM OLA</nick>
   </item>
   <item>
      <nick>IT</nick>
      <num>000000000000000797</nick>
      <desc>Dalmata 45g MLA</nick>
   </item>
   ...
</items>

这是我读取文件的代码:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vText" select="replace(unparsed-text('file:///C:/Users/Quality/Desktop/test.txt'),'\r','')"/>
<xsl:template name="main" match="/">
<items>
<xsl:for-each select="$vText">
   <item>
         <xsl:element name="nick"><xsl:value-of select="substring($vText,1,2)"></xsl:value-of></xsl:element>
         <xsl:element name="num"><xsl:value-of select="substring($vText,3,18)"/></xsl:element>
         <xsl:element name="desc"><xsl:value-of select="substring($vText,21,40)"/></xsl:element>
   </item>
</xsl:for-each>
</items>
</xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

我想你想用换行标记test.txt的内容并处理它。 我希望这个XSLT有所帮助:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:variable name="vText" select="tokenize(unparsed-text('file:///C:/Users/Quality/Desktop/test.txt'),'&#xa;')"/>
    <xsl:template name="main" match="/">
        <items>
            <xsl:for-each select="$vText">
                <item>
                    <xsl:element name="nick">
                        <xsl:value-of select="substring(.,1,2)"/>
                    </xsl:element>
                    <xsl:element name="num">
                        <xsl:value-of select="substring(.,3,18)"/>
                    </xsl:element>
                    <xsl:element name="desc">
                        <xsl:value-of select="substring(.,21,40)"/>
                    </xsl:element>
                </item>
            </xsl:for-each>
        </items>
    </xsl:template>
</xsl:stylesheet>