@Commons@groovy.util.logging.Commons @CompileStatic@groovy.transform.CompileStatic class XmlMapMarshaller extends Object
Map 数据转换成 XML 的装配器,已注册名为 map 的装配器
使用 [x: 1].encodeAsXML() 将 Map 对象转换成 XML 时,生成的数据结构与 json 不同,
为 <map><entry key="x">1</entry></map> ,标签固定为 entry,不像对象那样将 key 作为标签,
如 <map><x>1</x></map>;而采用本装配器,即可生成这种结构。
示例:
import grails.converters.XML
import org.grails.web.converters.configuration.ConvertersConfigurationHolder
import org.grails.web.converters.configuration.DefaultConverterConfiguration
XML.use("map") {
//((DefaultConverterConfiguration) 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_props 装配器是一样的
println([x: [[1, 2, 3]]].encodeAsXML()) // 多维列表,降维后同上
println([x: "<![CDATA[ 大<文>本 ]]>"].encodeAsXML()) // 结果和 map_props 装配器是一样的
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</x></map>
<?xml version="1.0" encoding="UTF-8"?><map><x>1</x><y><z>2</z></y></map>
<?xml version="1.0" encoding="UTF-8"?><map><x><y><z>1</z></y></x></map>
<?xml version="1.0" encoding="UTF-8"?><map><x><y>1</y></x><x><y>2</y></x><x><y>3</y></x><x><a><b>4</b></a></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</x><y><z>2</z><w>1</w><w>2</w><w>3</w><xx><a>1</a></xx></y><yy><a>1</a></yy><yy><b><c>2</c></b></yy></map>
| Type | Name and description |
|---|---|
String |
getElementName(Object o)根节点的标签名,默认为 map |
static Boolean |
isCDATA(String v) |
void |
marshalObject(Object object, grails.converters.XML xml)转换XML |
static void |
setElementName(String tagName) |
boolean |
supports(Object object)仅支持 Map 对象 |
static void |
writeCDATA(grails.converters.XML xml, String k, String v) |
| 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() |
根节点的标签名,默认为 map
转换XML
仅支持 Map 对象