如何添加 在 Groovy MarkupBuilder 中的 XML 元素中的文本之后

How to add 
 after text in XML element in Groovy MarkupBuilder

基本上,我们正在以旧方式更改 InDesign 项目的数据源 XML。我们不想更改 InDesign,因此我必须从新数据源(通过 Mule ESB 的 SOAP 网络服务)调整新的 XML。我使用 groovy 来转换所说的 XML,一切都在进行,直到我遇到这个问题。 InDesign 中的旧 XML 仅适用于添加到每个文本后的特殊字符:
.

这是一个有效的例子 XML :

<?xml version='1.0' encoding='UTF-8'?>
<w_import_saisie_web><w_evenement><w_titre>My Title&#xA;</w_titre></w_evenement>
</w_import_saisie_web>

我无法在 Groovy 脚本中添加特殊字符:这是我目前尝试的方法:

root = new XmlSlurper(false,false).parseText(payload)

    def xml = new StringWriter().with { w -> new groovy.xml.MarkupBuilder(w).with {
            mkp.xmlDeclaration(version: "1.0", encoding: "utf-8")                       
                     "w_import_saisie_web"() {                      
                                "w_titre"( root.title + "&#xA;")    
                        }
                    }
        }
        w.toString()
    }

我也试过了:

"w_titre"( root.title + '&#xA;') 
"w_titre"( root.title + '&amp'+'#xA;')  
"w_titre"( root.title + "&amp"+"#xA;") 

等等

我可以毫无问题地打印这个

<?xml version='1.0' encoding='UTF-8'?>
<w_import_saisie_web><w_evenement><w_titre>My Title</w_titre></w_evenement>
</w_import_saisie_web>

但我似乎做不到:

<?xml version='1.0' encoding='UTF-8'?>
<w_import_saisie_web><w_evenement><w_titre>My Title&#xA;</w_titre></w_evenement>
</w_import_saisie_web>

有人可以帮帮我吗?

您可以使用 mkp.yieldUnescaped:

println new StringWriter().with { w ->
    new groovy.xml.MarkupBuilder(w).with {
        escapeAttributes = false
        mkp.xmlDeclaration(version: "1.0", encoding: "utf-8")                       
        w_import_saisie_web {                      
            w_titre {
                mkp.yieldUnescaped 'woo&#xA;'
            }
        }
    }
    w.toString()
}

打印:

<?xml version='1.0' encoding='utf-8'?>
<w_import_saisie_web>
  <w_titre>woo&#xA;</w_titre>
</w_import_saisie_web>

如果您不想对 &#xA; 进行硬编码,您可以使用 XmlUtil:

中的 escapeControlCharacters
import groovy.xml.XmlUtil

println new StringWriter().with { w ->
    new groovy.xml.MarkupBuilder(w).with {
        escapeAttributes = false
        mkp.xmlDeclaration(version: "1.0", encoding: "utf-8")                       
        w_import_saisie_web {                      
            w_titre {
                mkp.yieldUnescaped XmlUtil.escapeControlCharacters('woo\n')
            }
        }
    }
    w.toString()
}

打印:

<?xml version='1.0' encoding='utf-8'?>
<w_import_saisie_web>
  <w_titre>woo&#10;</w_titre>
</w_import_saisie_web>

你可以尝试使用xml cdata

<![CDATA[" and ends with "]]>