如何添加 在 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
</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 + "
")
}
}
}
w.toString()
}
我也试过了:
"w_titre"( root.title + '
')
"w_titre"( root.title + '&'+'#xA;')
"w_titre"( root.title + "&"+"#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
</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
'
}
}
}
w.toString()
}
打印:
<?xml version='1.0' encoding='utf-8'?>
<w_import_saisie_web>
<w_titre>woo
</w_titre>
</w_import_saisie_web>
如果您不想对 

进行硬编码,您可以使用 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 </w_titre>
</w_import_saisie_web>
你可以尝试使用xml cdata
<![CDATA[" and ends with "]]>
基本上,我们正在以旧方式更改 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
</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 + "
")
}
}
}
w.toString()
}
我也试过了:
"w_titre"( root.title + '
')
"w_titre"( root.title + '&'+'#xA;')
"w_titre"( root.title + "&"+"#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
</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
'
}
}
}
w.toString()
}
打印:
<?xml version='1.0' encoding='utf-8'?>
<w_import_saisie_web>
<w_titre>woo
</w_titre>
</w_import_saisie_web>
如果您不想对 

进行硬编码,您可以使用 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 </w_titre>
</w_import_saisie_web>
你可以尝试使用xml cdata
<![CDATA[" and ends with "]]>