我正在尝试使用Groovy中的UnEscape xml:
<student><age value="20"></age></student>
到
<student><age value="20"></age></student>
但我无法找到任何可以实现此目的的库。我尝试使用groovy.json.StringEscapeUtils.unescapeJavaScript
,但它没有帮助。
有一个库groovy.xml.XmlUtil
有escapeXml
方法,但它没有unescape
方法。
我的用途是在Elasticsearch v1.3.2中使用这个groovy脚本,其中包含groovy-all-2.3.2.jar
有什么建议吗?
答案 0 :(得分:5)
你可以使用apache-lang来实现这个目的。
// For Grails (2), add:
//
// compile 'org.apache.commons:commons-lang3:3.3'
//
// to your build config. For a groovy script, we can do:
@Grab('org.apache.commons:commons-lang3:3.3')
import org.apache.commons.lang3.StringEscapeUtils
def xml = '<student><age value="20"></age></student>'
def unescaped = StringEscapeUtils.unescapeXml(xml)
比编写和维护自己更容易; - )
答案 1 :(得分:3)
不是最有效和最完整的解决方案,但我认为它可以完成这项工作:
def s = '<student><age value="20"></age></student>'
def u = s.replaceAll(/</, '<')
.replaceAll(/>/, '>')
.replaceAll(/"/, '"')
.replaceAll(/'/, "'")
.replaceAll(/&/, '&')
assert u == '<student><age value="20"></age></student>'
答案 2 :(得分:2)
这里有一个使用内置XmlSlurper类的技巧,没有其他库:
value = "X & Y < Z"
// wrap the string in made up tags to create
// well-enough-formed XML for the XmlSlurper
xml = "<foo>${value}</foo>"
println xml
root = new XmlSlurper().parseText(xml)
root.toString()
结果:&#39; X&amp; Y&lt; ž&#39;