xslt是将文本转换为xml结构的好方法吗?

我试图找到一个更好的解决方案,将纯文本(但每个字段的预定义长度)转换为xml。 例如,输入文本可以是“Testuser new york 10018”,前11个字符表示用户名,接下来的12个字符表示城市,接下来的5个字符表示邮政编码。 所以我需要使用预定义的字段长度从上面的字符串形成一个xml。

我在想两种方法

  1. 通过在输入文本上使用子字符串函数定义业务实体并填充实体属性,然后将实体序列化为xml

  2. 预定义xml结构,使用xslt导航到每个节点并使用输入文本上的子字符串函数填充值。

以下语句:(XSLT) "isn't suitable for transforming from structured text to XML. "和语句"XSLT must have XML as the input document" **都是错误的

我在想两种方法

  1. 通过在输入文本上使用子字符串函数定义业务实体并填充实体属性,然后将实体序列化为xml

  2. 预定义xml结构,使用xslt导航到每个节点并使用输入文本上的子字符串函数填充值。

实际上,使用XSLT很容易实现方法2

I. XSLT 1.0

                        

当这个转换应用于特殊格式的文本时 (包含在单个顶部元素中以使格式正确 – 正如我们在XSLT 2.0中看到的那样,这种包装不是必需的):

 Testuser new_york 10018 usera seattle 98000 userb bellevue 98004 userb redmond 98052  

产生了想要的结果

  Testuser new york 10018   usera seattle 98000   userb bellevue 98004   userb redmond 98052  

备注

  1. 这只是演示如何完成任务的演示。 这就是为什么我不处理固定宽度的字段(稍微更容易),但空格分隔值。

  2. 包含在任何值中的任何空格都作为下划线输入输入(或我们选择的任何字符,我们知道它们永远不会成为任何值的一部分。在输出中,任何下划线都会转换为真实空间。

II。 XSLT 2.0解决方案

                      

当这个转换应用于任何XML文档时 (未使用且实际上不需要,如在XSLT 2.0中,没有必要具有源XML文档),并且如果文件C:\temp\delete\delete.txt

 Testuser new_york 10018 usera seattle 98000 userb bellevue 98004 userb redmond 98052 

再次产生想要的,正确的结果

  Testuser new york 10018   usera seattle 98000   userb bellevue 98004   userb redmond 98052  

备注

  1. 使用标准XSLT 2.0函数unparsed-text()

  2. 使用标准XPath 2.0函数tokenize()

最后说明

大多数复杂的文本处理都是在XSLT中以工业方式完成的。 FXSL库包含一个通用的LR(1)解析器和一个调整后的YACC,它生成XML格式的表 ,这些是这个通用运行时LR(1)解析器的输入。

使用此工具,我成功地为JSON和XPath 2.0等复杂语言构建了解析器

XSLT 2.0非常适合将结构化文本转换为XML。 您可能会喜欢Stephanie Haupt和Maik Stuehrenberg撰写的2010年论文:

http://www.balisage.net/Proceedings/vol5/html/Haupt01/BalisageVol5-Haupt01.html

或者我自己的2008年论文

http://www.saxonica.com/papers/ideadb-1.1/mhk-paper.xml

用于案例研究。

我通常不会尝试使用XSLT 1.0,但Dimitre的答案显示,它可以在简单的情况下完成。