使用Groovy 2.1转义XML

在将源代码发布到我的博客时,我经常需要将小于号(<)和大于号(>)转换为其各自的实体引用,以便在浏览器呈现输出时不会将它们混淆为HTML标记。 我经常使用vim或Perl使用快速搜索和替换语法(例如%s/</\&lt;/g%s/>/\&gt;/g来完成此操作。 但是, Groovy 2.1引入了一种执行此操作的方法,在本文中,我演示了一个Groovy脚本,该脚本使用了groovy.xml.XmlUtil.escapeXml(String)方法。

escapeXml.groovy

#!/usr/bin/env groovy
/*
 * escapeXml.groovy
 *
 * Requires Groovy 2.1 or later.
 */
if (args.length < 1)
{
   println "USAGE: groovy escapeXml.groovy <xmlFileToBeProcessed>"
   System.exit(-1)
}
def inputFileName = args[0]
println "Processing ${inputFileName}..."
def inputFile = new File(inputFileName)
String outputFileName = inputFileName + ".escaped"
def outputFile = new File(outputFileName)
if (outputFile.createNewFile())
{
   outputFile.text = groovy.xml.XmlUtil.escapeXml(inputFile.text)
}
else
{
   println "Unable to create file ${outputFileName}"
}

如其GroovyDoc所述, XmlUtil.escapeXml方法旨在“用其XML实体转义以下字符”'&<>。 通过它运行源代码有助于将符号转换为XML实体引用,这些引用将由浏览器正确呈现。 例如,这对于使用泛型的Java代码特别有用。

Groovydoc声明支持以下从符号到对应实体引用的转换:

符号 实体
参考
&quot;
'
&amp;
< &lt;
> &gt;

这种方法的优点之一是,我可以使用单个命令而不是一次使用一个符号来将所有五个特殊符号转义到整个String或文件中。

此XmlUtil.escapeXml方法的Groovydoc还声明该方法不执行的操作:

上面的示例显示了一个Groovy脚本文件,该文件使用XmlUtil.escapeXml(String) ,但也可以在命令行上内联运行。 例如,这是在DOS中完成的,如下所示:

type escapeXml.groovy | groovy -e "println groovy.xml.XmlUtil.escapeXml(System.in.text)"

刚刚显示的命令将获取提供的文件(在这种情况下为escapeXml.groovy本身),并呈现输出,并用实体引用替换特定符号。 在Linux / Unix中,可以使用“ cat”而不是“ type”以相同的方式进行处理。 这显示在下一个屏幕快照中。

inlineEscapeXmlGroovy

这篇博客文章展示了如何在脚本内或命令行上使用XmlUtil.escapeXml(String)将某些常见问题的XML字符转义为其实体引用。 尽管此处未显示,但也可以将此类代码嵌入Java应用程序中。

参考:Inspired by Actual Events博客上,我们的JCG合作伙伴 Dustin Marx 使用Groovy 2.1逃避了XML

翻译自: https://www.javacodegeeks.com/2013/07/escaping-xml-with-groovy-2-1.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值