的XmlSlurper命名空间不被使用
问题描述:
我有一个XML模板文档:的XmlSlurper命名空间不被使用
<TriadMessage xmlns="http://www.myco.com/02/11/2008/V1/TriadMessage.xsd"
xmlns:triad="http://www.myco.com/02/11/2008/V1/TriadTypes.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<TriadRouteInfo>
<triad:RoutingCorrelationId>new value goes here</triad:RoutingCorrelationId>
...
,我读使用Groovy 1.7:
triadDoc = new XmlSlurper().parseText(xmlMessage).declareNamespace(
tm: "http://www.myco.com/02/11/2008/V1/TriadMessage.xsd",
triad: "http://www.myco.com/02/11/2008/V1/TriadTypes.xsd",
xsi: "http://www.w3.org/2001/XMLSchema-instance"
)
xmlBuilder = new StreamingMarkupBuilder()
writer = xmlBuilder.bind {mkp.yield triadDoc}
我然后将值插入文档:
triadDoc.TriadRouteInfo.RoutingCorrelationId = dto.getReportRevisionId()
...
和输出:
writer.toString()
这是我的文档的样子:
<?xml version="1.0" encoding="UTF-8"?>
<tm:TriadMessage xmlns:tm="http://www.myco.com/02/11/2008/V1/TriadMessage.xsd">
<tm:TriadRouteInfo>
<triad:RoutingCorrelationId xmlns:triad="http://www.myco.com/02/11/2008/V1/TriadTypes.xsd">24670</triad:RoutingCorrelationId>
...
注意,黑社会命名空间似乎每个元素。有很多这些线(我只在这里显示一个)。我希望NS仅在顶部声明,并通过黑社会提及:。我究竟做错了什么?
答
只是尝试这样做:
import groovy.xml.StreamingMarkupBuilder
def xml = """
<TriadMessage xmlns="http://www.myco.com/02/11/2008/V1/TriadMessage.xsd"
xmlns:triad="http://www.myco.com/02/11/2008/V1/TriadTypes.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<TriadRouteInfo>
<triad:RoutingCorrelationId>new value goes here</triad:RoutingCorrelationId>
</TriadRouteInfo>
</TriadMessage>"""
def triadDoc = new XmlSlurper().parseText(xml).declareNamespace(
tm: "http://www.myco.com/02/11/2008/V1/TriadMessage.xsd",
triad: "http://www.myco.com/02/11/2008/V1/TriadTypes.xsd",
xsi: "http://www.w3.org/2001/XMLSchema-instance")
def xmlBuilder = new StreamingMarkupBuilder()
writer = xmlBuilder.bind {
mkp.declareNamespace(tm: "http://www.myco.com/02/11/2008/V1/TriadMessage.xsd")
mkp.declareNamespace(triad: "http://www.myco.com/02/11/2008/V1/TriadTypes.xsd")
mkp.declareNamespace(xsi: "http://www.w3.org/2001/XMLSchema-instance")
mkp.yield triadDoc
}
triadDoc.TriadRouteInfo.RoutingCorrelationId = 'wheeee'
println writer
它打印出来,这(通过我美化了一番,所以它不是都在同一行):
<tm:TriadMessage xmlns:tm='http://www.myco.com/02/11/2008/V1/TriadMessage.xsd'
xmlns:triad='http://www.myco.com/02/11/2008/V1/TriadTypes.xsd'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<tm:TriadRouteInfo>
<triad:RoutingCorrelationId>wheeee</triad:RoutingCorrelationId>
</tm:TriadRouteInfo>
</tm:TriadMessage>
有什么好?