0

基本上,我们正在以旧方式更改 InDesign 项目的数据源 XML。我们不想更改 InDesign,因此我必须从新数据源(通过 Mule ESB 的 SOAP Web 服务)调整新 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;") 

ETC

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

<?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>

有人可以帮我吗?

4

2 回答 2

1

您可以使用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;,你可以使用escapeControlCharactersfrom XmlUtil

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>
于 2015-07-24T19:36:33.790 回答
-1

你可以尝试使用xml cdata

<![CDATA[" and ends with "]]>
于 2015-07-26T06:03:03.167 回答