如何说服groovy.xml.MarkupBuilder创建一个名为';使用';

如何说服groovy.xml.MarkupBuilder创建一个名为';使用';,xml,groovy,markupbuilder,Xml,Groovy,Markupbuilder,SVG定义了一个名为use的元素,我正在尝试使用groovy.xml.MarkupBuilder生成一个SVG文件,该文件利用了这个标记: 然而,use在groovy中也是一个关键字。我如何正确地转义它?不确定这些方法是否正式,但它们如何工作: v1: defxml=newgroovy.xml.MarkupBuilder() xml.svg{ 蔑视{ g(id:“形状”){ 矩形(x:50,y:50,宽度:50,高度:50) 圆圈(cx:50,cy:50,r:50) } } createNod

SVG定义了一个名为
use
的元素,我正在尝试使用
groovy.xml.MarkupBuilder
生成一个SVG文件,该文件利用了这个标记:


然而,
use
在groovy中也是一个关键字。我如何正确地转义它?

不确定这些方法是否正式,但它们如何工作:

v1:

defxml=newgroovy.xml.MarkupBuilder()
xml.svg{
蔑视{
g(id:“形状”){
矩形(x:50,y:50,宽度:50,高度:50)
圆圈(cx:50,cy:50,r:50)
}
}
createNode('use',[“xlink:href”:“#shape”,x:50,y:50])
//嵌套元素可能在这里
nodeCompleted('svg','use')
}
v2:

defxml=newgroovy.xml.MarkupBuilder()
xml.svg{
蔑视{
g(id:“形状”){
矩形(x:50,y:50,宽度:50,高度:50)
圆圈(cx:50,cy:50,r:50)
}
}
doInvokeMethod('use','use',[[“xlink:href:“#shape”,x:50,y:50],{
/*嵌套元素可能在此处*/
} ])
}
v3:

我们可以重新定义负责进行名称映射或检查转义规则的
getName
方法

@groovy.transform.CompileStatic
类MyMarkupBuilder扩展了groovy.xml.MarkupBuilder{
def getName(字符串名称){
if(name.startsWith(“”)返回name.substring(2)
返回名称
}
}
def xml=new MyMarkupBuilder()
xml.svg{
蔑视{
g(id:“形状”){
矩形(x:50,y:50,宽度:50,高度:50)
圆圈(cx:50,cy:50,r:50)
}
}
__使用(“xlink:href”:“#shape”,x:50,y:50)
}

不确定这些方法是官方的,但它们是有效的:

v1:

defxml=newgroovy.xml.MarkupBuilder()
xml.svg{
蔑视{
g(id:“形状”){
矩形(x:50,y:50,宽度:50,高度:50)
圆圈(cx:50,cy:50,r:50)
}
}
createNode('use',[“xlink:href”:“#shape”,x:50,y:50])
//嵌套元素可能在这里
nodeCompleted('svg','use')
}
v2:

defxml=newgroovy.xml.MarkupBuilder()
xml.svg{
蔑视{
g(id:“形状”){
矩形(x:50,y:50,宽度:50,高度:50)
圆圈(cx:50,cy:50,r:50)
}
}
doInvokeMethod('use','use',[[“xlink:href:“#shape”,x:50,y:50],{
/*嵌套元素可能在此处*/
} ])
}
v3:

我们可以重新定义负责进行名称映射或检查转义规则的
getName
方法

@groovy.transform.CompileStatic
类MyMarkupBuilder扩展了groovy.xml.MarkupBuilder{
def getName(字符串名称){
if(name.startsWith(“”)返回name.substring(2)
返回名称
}
}
def xml=new MyMarkupBuilder()
xml.svg{
蔑视{
g(id:“形状”){
矩形(x:50,y:50,宽度:50,高度:50)
圆圈(cx:50,cy:50,r:50)
}
}
__使用(“xlink:href”:“#shape”,x:50,y:50)
}
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)

xml.svg {
    defs {
        g(id:"shape") {
            rect(x:50, y:50, width:50, height:50)
            circle(cx:50, cy:50, r:50)
        }
    }

    use("xlink:href":"#shape", x:50,  y:50")
}