Velocity 是一种模板语言,几乎没有编程能力。它通常用于生成 XML,而不是处理它们。VTL 本身不能用于此,但鉴于您可以将任何 Java 对象放在上下文中,您可以使用知道如何将 XML 字符串解析为 DOM 的工具,您可以进一步处理它。Velocity Tools已经有一个XmlTool,您可以启用和使用它。
如果你不能在你的项目中配置工具,那么你可以尝试一个简单的字符串处理,虽然这很脆弱。不要忘记 Velocity 中的变量是真正的 Java 对象,可以调用任何公共方法:
#set ($xml = '<?xml version="1.0" encoding="UTF-8"?>
<s-d-structure> <heading>This is title</heading>
<main> <cad>
<bad>this is formatted html</bad>
<name>some text </name>
<title>show</title>
</cad> </main>
</s-d-structure>')
## Extract only the main content
#set ($xml = $xml.replaceFirst('(?s).*<cad>(.*)</cad>.*', '$1'))
## There's no #while in Velocity, so we just loop long enough
#foreach ($i in [0..10000])
## Extract the first tag
$xml.replaceFirst('(?s)\s*+<([^>]++)>([^<]*+)</.*+', '$1: $2')
#set ($xml = $xml.replaceFirst('(?s)\s*+<[^>]++>[^<]*+</[^>]++>(.*+)', '$1'))
#if ($xml.trim() == '')
## Stop the foreach once the string is empty
#break($foreach)
#end
#end