如何按值长度将基于行的文本转换为 xml
How to convert linebased text to xml by valuelengths
我有一个包含 X 行的文本文件。每条线代表一个完整的数据集。
每一行的结构是这样的:
- Person A (Line 1)
- Type (1 char)
- Firstname (50 chars)
- Lastname (50 chars)
- Adress (50 chars)
- ...
- Person B (Line 2)
- ...
值之间没有分隔符。 Empty/Null 值只是用于其字段字符数量的 Y 空格。
所以没有空格它可能看起来像:
1WaltherWhiteAlbuquerque...
现在我想将其作为 XML-文件,其中包含 X 个节点,例如 [Person(Type,Firstname,..)]。
是否可以编写一个模板,其中 "knows" value-charlength 然后将其解析为 xml 格式?
Is is possible to write a template which "knows" the value-charlength and then parse it into xml format?
当然可以。在 XSLT 3.0 中,像这样的东西应该作为样式表的初始模板(未测试):
<xsl:template name="readfile">
<xsl:variable name="lines"
as="xs:string*"
select="unparsed-text-lines('mycolumnbasedinput.txt')"
/>
<xsl:for-each select="$lines">
<xsl:element name="Person">
<xsl:element name="Type>
<xsl:value-of select="substring(.,1,1)"/>
</
<xsl:element name="Firstname">
<xsl:value-of select="substring(.,2,50)"/>
</
<xsl:element name="Lastname">
<xsl:value-of select="substring(.,52,50)"/>
</
<xsl:element name="Adress">
<xsl:value-of select="substring(.,102,50)"/>
</
...
</
</
</
在 XSLT 2.0 中,您需要使用 unparsed-text() 读取输入,然后使用 tokenize() 或您选择的方法将其拆分成行。
我有一个包含 X 行的文本文件。每条线代表一个完整的数据集。 每一行的结构是这样的:
- Person A (Line 1)
- Type (1 char)
- Firstname (50 chars)
- Lastname (50 chars)
- Adress (50 chars)
- ...
- Person B (Line 2)
- ...
值之间没有分隔符。 Empty/Null 值只是用于其字段字符数量的 Y 空格。 所以没有空格它可能看起来像:
1WaltherWhiteAlbuquerque...
现在我想将其作为 XML-文件,其中包含 X 个节点,例如 [Person(Type,Firstname,..)]。 是否可以编写一个模板,其中 "knows" value-charlength 然后将其解析为 xml 格式?
Is is possible to write a template which "knows" the value-charlength and then parse it into xml format?
当然可以。在 XSLT 3.0 中,像这样的东西应该作为样式表的初始模板(未测试):
<xsl:template name="readfile">
<xsl:variable name="lines"
as="xs:string*"
select="unparsed-text-lines('mycolumnbasedinput.txt')"
/>
<xsl:for-each select="$lines">
<xsl:element name="Person">
<xsl:element name="Type>
<xsl:value-of select="substring(.,1,1)"/>
</
<xsl:element name="Firstname">
<xsl:value-of select="substring(.,2,50)"/>
</
<xsl:element name="Lastname">
<xsl:value-of select="substring(.,52,50)"/>
</
<xsl:element name="Adress">
<xsl:value-of select="substring(.,102,50)"/>
</
...
</
</
</
在 XSLT 2.0 中,您需要使用 unparsed-text() 读取输入,然后使用 tokenize() 或您选择的方法将其拆分成行。