XSLT 从某个元素的文本中逐行获取
我想问一下 XSLT 中是否有任何方法可以在某些元素中逐行获取文本并将某些内容应用于该行。例如,我有
<screen>
Volume in drive C is SYSTEM Serial number is 2350:717C
Directory of C:\
10/17/97 9:04 <DIR> bin
10/16/97 14:11 <DIR> DOS
10/16/97 14:40 <DIR> Program Files
10/16/97 14:46 <DIR> TEMP
10/17/97 9:04 <DIR> tmp
10/16/97 14:37 <DIR> WINNT
10/16/97 14:25 119 AUTOEXEC.BAT
2/13/94 6:21 54,619 COMMAND.COM
10/16/97 14:25 115 CONFIG.SYS
11/16/97 17:17 61,865,984 pagefile.sys
2/13/94 6:21 9,349 WINA20.386
</screen>
并且我想逐行获取并在每行之前添加空格(括号,连字符等)。
感谢您的帮助:-)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我。 XSLT 2.0 解决方案:
当此转换应用于提供的 XML 文档时:
想要的正确结果(文本节点的每一行都以字符串
开头”行:“
)生成:解释:
适当使用
tokenize()
函数,第二个参数是正则表达式,允许可选的 CR 位于 NL 字符之前。二. XSLT 1.0 解决方案:
当此 XSLT 1.0 转换应用于同一个 XML 文档(上面)时,所需的结果(文本节点的每一行,前面加上字符串
"line: "< /code>)生成:
解释:
递归命名模板来提取并输出下一行。停止条件 - 当字符串长度为零时。
适当使用
substring-before()< /code>
,
substring-after()
和 哨兵技术,以最大限度地减少代码长度和复杂性。I. XSLT 2.0 solution:
when this transformation is applied on the provided XML document:
the wanted, correct result (each line of the text node is prepended by the string
"line: "
) is produced:Explanation:
Appropriate use of the
tokenize()
function with second argument a RegEx that allows an optional CR to precede the NL character.II. XSLT 1.0 solution:
When this XSLT 1.0 transformation is applied on the same XML document (above), the wanted result (each line of the text node, prepended with the string
"line: "
) is produced:Explanation:
Recursive named template to extract and output each next line. Stop condition -- when the string has zero length.
Appropriate use of
substring-before()
,substring-after()
and a sentinel technique to minimize code length and complexity.好吧,使用 Saxon 9 或 AltovaXML 工具和其他工具支持的 XSLT 2.0,您可以使用
tokenize
函数,例如使用 XSLT 1.0,您可以检查您的处理器是否支持扩展函数,例如 http://www.exslt.org/str/functions/tokenize/index.html。
Well with XSLT 2.0 as supported by Saxon 9 or AltovaXML tools and others you can use the
tokenize
function e.g.With XSLT 1.0 you could check whether your processor supports an extension function like http://www.exslt.org/str/functions/tokenize/index.html.