使用 XSLT 将常规文本文件转换为 XML
我有一个文本文件,如下所示:
XXX^YYYY^AAAAA^XXXXXX^AAAAAA....
字段使用插入符号(^)分隔,我的假设是:
第一个字段= NAME
第二个字段 = 姓氏
第三个字段 = 地址
等。
我想使用 xsl (XSLT) 将其转换为有效的 XML。 例如:
<name>XXX</name>
<l_name>YYYY</l_name>
我知道使用 Perl 可以轻松完成,但如果可能的话,我需要使用 XSLT 来完成。
I have a text file which looks like that:
XXX^YYYY^AAAAA^XXXXXX^AAAAAA....
Fields are separated using a caret(^), my presumptions are:
the first field = NAME
the second filed = Last name
third field = Address
etc..
I would like to turn it into a valid XML using xsl (XSLT).
such as:
<name>XXX</name>
<l_name>YYYY</l_name>
I know It can be done easily with Perl, but I need to do it with XSLT, if possible.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
可以使用标准 XSLT 2.0 函数读取文本(非 XML)文件
未解析-text()
。然后可以使用标准 XPath 2.0 函数
tokenize()
< /strong> 和另外两个接受正则 a 表达式的标准 XPath 2.0 函数< /a> 作为他们的一员参数 --matches()
和replace()
。XSLT 2.0 有自己强大的使用正则表达式处理文本处理的说明::
、<强>
和<强><一href="http://www.w3.org/TR/xslt20/#element-non-matching-substring">
指导。通过以下实际示例中的这些函数和指令,了解 XSLT 文本处理的一些更强大的功能:XSLT WideFinder 问题的解决方案。
最后,这是一个 XSLT 1.0 解决方案:
当将此转换应用于以下 XML 文档时:
生成所需的正确结果:
Text (non-XML) files can be read with the standard XSLT 2.0 function
unparsed-text()
.Then one can use the standard XPath 2.0 function
tokenize()
and two other standard XPath 2.0 functions that accept regular a expression as one of their arguments --matches()
andreplace()
.XSLT 2.0 has its own powerful instructions to handle text processing using regular expressions:: the
<xsl:analyze-string>
, the<xsl:matching-substring>
and the<xsl:non-matching-substring>
instruction.See some of the more powerful capabilities of XSLT text processing with these functions and instructions in this real-world example: an XSLT solution to the WideFinder problem.
Finally, here is an XSLT 1.0 solution:
When this transformation is applied to the following XML document:
the wanted, correct result is produced:
使用 XSLT 1.0 进行标记和排序
如果您使用 xslt 2.0,那就简单得多:
fn:tokenize(字符串,模式)
Tokenizing and sorting with XSLT 1.0
If you use xslt 2.0 it's much simpler:
fn:tokenize(string,pattern)