如何在Apache Velocity中进行XML转义?

7

我正在使用Apache Velocity生成XML。最好(最直接)的方法是什么来转义输出?

(我看到有一个转义工具,但无法确定它的开发状态。我还认为XML转义很可能是Velocity直接支持的功能。)

1个回答

10

看一下事件处理器

eventhandler.referenceinsertion.class = org.apache.velocity.app.event.implement.EscapeXmlReference

转义工具是一个可用于生产的工具,如果您只需要转义特定引用,则可以使用该工具(最终版本的工具刚刚发布,但之前的测试版已经进行了2年或更长时间)

$esc.xml($var)

如何初始化 Velocity 工具。

将 velocity-tools.xml 文件包含到您的项目中并启用所需的工具:

<tools> 
    <data type="number" key="TOOLS_VERSION" value="2.0"/>
    <data type="boolean" key="GENERIC_TOOLS_AVAILABLE" value="true"/>
    <toolbox scope="application">
        <tool class="org.apache.velocity.tools.generic.AlternatorTool"/>
        <tool class="org.apache.velocity.tools.generic.DisplayTool"/>
        <tool class="org.apache.velocity.tools.generic.MathTool"/>
        <tool class="org.apache.velocity.tools.generic.NumberTool"/>
        <tool class="org.apache.velocity.tools.generic.ComparisonDateTool"/>
        <tool class="org.apache.velocity.tools.generic.ClassTool"/>
        <tool class="org.apache.velocity.tools.generic.ConversionTool"/>
        <tool class="org.apache.velocity.tools.generic.EscapeTool"/>
        <tool class="org.apache.velocity.tools.generic.FieldTool"/>
        <tool class="org.apache.velocity.tools.generic.ListTool"/>
        <tool class="org.apache.velocity.tools.generic.ResourceTool"/>
        <tool class="org.apache.velocity.tools.generic.SortTool"/>
    </toolbox>
    <toolbox scope="request">
        <tool class="org.apache.velocity.tools.generic.LoopTool"/>
        <tool class="org.apache.velocity.tools.generic.ContextTool"/>
        <tool class="org.apache.velocity.tools.generic.LinkTool"/>
        <tool class="org.apache.velocity.tools.generic.RenderTool"/>
    </toolbox>
</tools>

那么,速度上下文创建过程将如下所示:

ToolManager velocityToolManager = new ToolManager();
velocityToolManager.configure("velocity-tools.xml");
VelocityContext context = new VelocityContext(velocityToolManager.createContext());

谢谢serg555,这让我的一天变得更美好了! - Jan Algermissen
serg555, 你能告诉我如何使用属性配置(而不使用 XML 文件)添加 Escape 工具吗? - Jan Algermissen
更新:我尝试了以下代码:p.setProperty("tools.toolbox","request,session,application"); p.setProperty("tools.session.esc", "org.apache.velocity.tools.generic.EscapeTool"); p.setProperty("tools.request.esc", "org.apache.velocity.tools.generic.EscapeTool"); p.setProperty("tools.application.esc", "org.apache.velocity.tools.generic.EscapeTool");但似乎没有起作用。我做错了什么? - Jan Algermissen
@Jan Algermissen:我添加了一个初始化Tools 2.0的示例。你说的不需要xml是什么意思?应该有一个描述启用工具的xml文件(velocity tools已经包含了默认的xml文件,其中包含所有工具的启用状态,如果您不想在项目中使用此xml,则只需加载默认的xml即可,它应该已经在您的类路径中)。 - serg
555 - 感谢你的帮助! - Jan Algermissen
当我尝试上面的代码时,我会收到一个错误:Caused by: java.lang.ClassNotFoundException: org.apache.velocity.tools.config.Data。这是一个Maven项目,这些是我的依赖项:<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> <type>jar</type> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-tools</artifactId> <version>2.0</version> </dependency>。 - javydreamercsw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接