如何按值长度将基于行的文本转换为 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() 或您选择的方法将其拆分成行。