[英]Groovy Script to read and transform xml
需要有关Groovy脚本的帮助。 我有以下输入xml,其中将动态填充该xml,但对于在RecordDetails
节点下将填充多少个节点,我们没有任何线索。
输入:
<?xml version="1.0" encoding="UTF-8"?>
<Record>
<XYZ>
<Header>
<Code>12345</Code>
</Header>
<Details>
<RecID>1</RecID>
<RecordDetail>
<Name>ABC</Name>
<Email>abc@in.com</Email>
<Address>123,acdf</Address>
</RecordDetail>
</Details>
<Details>
<RecID>2</RecID>
<RecordDetail>
<Name>ABC</Name>
<Email>abc@in.com</Email>
</RecordDetail>
</Details>
</XYZ>
</Record>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<Record>
<Header>
<Code>12345</Code>
</Header>
<Details>
<RecID>1</RecID>
<RecordDetail>
<FieldName>NAME</FieldName>
<FieldValue>ABC</FieldValue>
</RecordDetail>
<RecordDetail>
<FieldName>Email</FieldName>
<FieldValue>ABC@a.com</FieldValue>
</RecordDetail>
</Details>
</Record>
您只需要转换输入xml。
这可以通过以下方式实现:
看起来您正在寻找下一个。
这是常规脚本:
def xml = '''<?xml version="1.0" encoding="UTF-8"?>
<Record>
<XYZ>
<Header>
<Code>12345</Code>
</Header>
<Details>
<RecID>1</RecID>
<RecordDetail>
<Name>ABC</Name>
<Email>abc@in.com</Email>
<Address>123,acdf</Address>
</RecordDetail>
</Details>
<Details>
<RecID>2</RecID>
<RecordDetail>
<Name>ABC</Name>
<Email>abc@in.com</Email>
</RecordDetail>
</Details>
</XYZ>
</Record>'''
def parsedXml = new XmlSlurper().parseText(xml)
def builder = new groovy.xml.StreamingMarkupBuilder()
builder.encoding = 'UTF-8'
def transformedXml = builder.bind {
mkp.xmlDeclaration()
Record {
Header {
Code (parsedXml.'**'.find{ it.name() == 'Code'})
}
def details = parsedXml.'**'.findAll{ it.name() == 'Details'}
details.each { detail ->
Details {
RecID (detail.RecID)
detail.RecordDetail.children().each { fld ->
RecordDetail {
FieldName (fld.name())
FieldValue (fld.text())
}
}
}
}
}
}
println groovy.xml.XmlUtil.serialize(transformedXml)
可以在线快速尝试演示
输出:
编辑:基于OP的问题。
mkp.xmlDeclaration()
-添加<?xml version="1.0"?>
details.each { detail ->
-details是列表。 我们想遍历每个细节。 每个值都会detail
。
与for(detail : details)
类似。
fld
也与上述相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.