@Commons@groovy.util.logging.Commons @CompileStatic@groovy.transform.CompileStatic class XmlMapPropsMarshaller extends Object
Map 数据转换成 XML 的装配器,已注册名为 map_props 的装配器
类似装配器 map,但这里输出的结果中,如果键的值为一般数据类型(字符串、数字等,除非以 <![CDATA[ 开头、]]> 结尾的大文本),
则直接作为标签属性,而不是单独的标签,如下面的例子所示。
示例:
grails.converters.XML.use("map_props") {
//org.grails.web.converters.configuration.ConvertersConfigurationHolder.getThreadLocalConverterConfiguration(XML.class).prettyPrint = false
println([x: 1].encodeAsXML())
println([x:1, y: [z: 2]].encodeAsXML())
println([x: [y: [z: 1]]].encodeAsXML())
println([x: [[y: 1], [y: 2], [y: 3], [a: [b: 4]]]].encodeAsXML()) // 包含 Map 列表
println([x: [1, 2, 3]].encodeAsXML()) // 结果和 map 装配器是一样的
println([x: [[1, 2, 3]]].encodeAsXML()) // 多维列表,降维后同上
println([x: "<![CDATA[ 大<文>本 ]]>"].encodeAsXML()) // 结果和 map 装配器是一样的
println([x: ["1", "<![CDATA[ 大<文>本 ]]>"]].encodeAsXML())
println([x:1, y: [z: 2, w: [1,2,3], xx: [a: 1]], yy: [[a:1], [b:[c:2]]]].encodeAsXML())
}
输出结果:
<?xml version="1.0" encoding="UTF-8"?><map x="1" />
<?xml version="1.0" encoding="UTF-8"?><map x="1"><y z="2" /></map>
<?xml version="1.0" encoding="UTF-8"?><map><x><y z="1" /></x></map>
<?xml version="1.0" encoding="UTF-8"?><map><x y="1" /><x y="2" /><x y="3" /><x><a b="4" /></x></map>
<?xml version="1.0" encoding="UTF-8"?><map><x>1</x><x>2</x><x>3</x></map>
<?xml version="1.0" encoding="UTF-8"?><map><x>1</x><x>2</x><x>3</x></map>
<?xml version="1.0" encoding="UTF-8"?><map><x><![CDATA[ 大<文>本 ]]></x></map>
<?xml version="1.0" encoding="UTF-8"?><map><x>1</x><x><![CDATA[ 大<文>本 ]]></x></map>
<?xml version="1.0" encoding="UTF-8"?><map x="1"><y z="2"><w>1</w><w>2</w><w>3</w><xx a="1" /></y><yy a="1" /><yy><b c="2" /></yy></map>
| Type | Name and description |
|---|---|
String |
getElementName(Object o)根节点的标签名,默认为 map |
void |
marshalObject(Object object, grails.converters.XML xml)转换XML |
static void |
setElementName(String tagName) |
boolean |
supports(Object object)仅支持 Map 对象 |
| Methods inherited from class | Name |
|---|---|
class Object |
Object#wait(long, int), Object#wait(long), Object#wait(), Object#equals(Object), Object#toString(), Object#hashCode(), Object#getClass(), Object#notify(), Object#notifyAll() |