Groovy的XML解析然后重建

问题描述:

比从daviderossi.blogspot.com我已经得到了一些帮助更多的得到一些代码的工作,以取代另一个Groovy的XML解析然后重建

def fm_xml = '''<?xml version="1.0" encoding="UTF-8"?> 
<MAlong> 
<Enquiry.ID>SC11147</Enquiry.ID> 
<student.name_middle></student.name_middle> 
<student.name_known></student.name_known> 
<student.name_previous></student.name_previous> 
<student.name_cert>John REnfrew</student.name_cert> 
<student.detail_gender>M</student.detail_gender> 
<student.sign_name>John Renfrew</student.sign_name> 
<student.sign_date>05/01/2010</student.sign_date> 
</MAlong>''' 

xml = new XmlParser().parseText(fm_xml) 
ix = xml.children().findIndexOf{it.name() =='student.name_middle'} 
nn = new Node(xml, 'student.name_middle', "NEW") 
if (ix != -1) { 
xml.children()[ix] = nn 
nn.parent = xml 
} 
writer = new StringWriter() 
new XmlNodePrinter(new PrintWriter(writer)).print(xml) 
result = writer.toString() 

XML值这给我下面的输出,但我喜欢它,是用正确形成结束标记,否则XPath查询新数据,然后将失败..

因此,例如

<student.name_known/> 

需求,成为

<student.name_known></student.name_known> 

任何想法??

<MAlong> 
<Enquiry.ID> 
SC11147 
</Enquiry.ID> 
<student.name_middle> 
NEW 
</student.name_middle> 
<student.name_known/> 
<student.name_previous/> 
<student.name_cert> 
John REnfrew 
</student.name_cert> 
<student.detail_gender> 
M 
</student.detail_gender> 
<student.sign_name> 
John Renfrew 
</student.sign_name> 
<student.sign_date> 
05/01/2010 
</student.sign_date> 
<student.name_middle> 
NEW 
</student.name_middle> 
</MAlong> 

<student.name_known/>

是完全中规中矩,和XPath查询应该便能很好地工作在这个XML结构。

+0

认为我有一个复制和粘贴错误,它确实没有工作,但仍有意使其稍微更具可读性 – 2010-07-19 06:41:24

+0

一般来说,您没有这种使用XML解析的控制级别。我没有看到Groovy有任何明显的'漂亮打印'选项,但任何解决方案可能都不值得。 – Dunderklumpen 2010-07-20 03:39:17

它应该工作通过设置expandEmptyElements选项设置为true

看到http://groovy.codehaus.org/api/groovy/util/XmlNodePrinter.html#setExpandEmptyElements%28boolean%29