在XmlParse / serialize之后丢失的属性值中使用的groovy xml名称空间定义

时间:2015-06-05 07:52:47

标签: groovy xml-parsing namespaces

使用XmlParser时,它会自动删除未使用的命名空间定义。它似乎没有检测到值中使用的命名空间。

示例代码:属性“type”的值是“xs:string”,它需要命名空间定义,但XmlParser将其删除

import groovy.xml.XmlUtil

def xml = '''<?xml version="1.0" encoding="UTF-8"?>
<value xmlns:xs="http://xs" type="xs:string">http://localhost:8001/MyService</value>
'''
def doc = new XmlParser().parseText(xml)

println(xml)
println(XmlUtil.serialize(doc))

输出:

****ORIGINAL****
<?xml version="1.0" encoding="UTF-8"?>
<value xmlns:xs="http://xs" type="xs:string">http://localhost:8001/MyService</value>

****XML PARSED/SERIALIZED*****
<?xml version="1.0" encoding="UTF-8"?>
<value type="xs:string">http://localhost:8001/MyService</value>

有没有办法告诉XmlParser保留这个命名空间定义?

1 个答案:

答案 0 :(得分:0)

    def parser = new XmlParser()
    parser.setFeature("http://xml.org/sax/features/namespaces", false)
    parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true)
    doc = parser.parseText(xml)
    println(XmlUtil.serialize(doc))