在将源代码发布到我的博客时,我经常需要将小于号(<)和大于号(>)转换为其各自的实体引用,以便在浏览器呈现输出时不会将它们混淆为HTML标记。 我经常使用vim或Perl使用快速搜索和替换语法(例如%s/</\</g
和%s/>/\>/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还声明该方法不执行的操作:
- “不转义控制字符” [ 为此使用XmlUtil.escapeControlCharacters(String) ]
- “不支持DTD或外部实体”
- “不特别对待代理对”
- “不对其输入执行Unicode验证”
上面的示例显示了一个Groovy脚本文件,该文件使用XmlUtil.escapeXml(String)
,但也可以在命令行上内联运行。 例如,这是在DOS中完成的,如下所示:
type escapeXml.groovy | groovy -e "println groovy.xml.XmlUtil.escapeXml(System.in.text)"
刚刚显示的命令将获取提供的文件(在这种情况下为escapeXml.groovy本身),并呈现输出,并用实体引用替换特定符号。 在Linux / Unix中,可以使用“ cat”而不是“ type”以相同的方式进行处理。 这显示在下一个屏幕快照中。
这篇博客文章展示了如何在脚本内或命令行上使用XmlUtil.escapeXml(String)
将某些常见问题的XML字符转义为其实体引用。 尽管此处未显示,但也可以将此类代码嵌入Java应用程序中。
翻译自: https://www.javacodegeeks.com/2013/07/escaping-xml-with-groovy-2-1.html