的Groovy的XmlSlurper:查找XML结构元素
问题描述:
比方说,有以下XML结构:的Groovy的XmlSlurper:查找XML结构元素
<Data>
<DataFieldText>
<DataFieldName>Field #1</DataFieldName>
<DataFieldValue>1</DataFieldValue>
</DataFieldText>
<DataFieldText>
<DataFieldName>Field #2</DataFieldName>
<DataFieldValue>2</DataFieldValue>
</DataFieldText>
<DataFieldText>
<DataFieldName>Field #3</DataFieldName>
<DataFieldValue>3</DataFieldValue>
</DataFieldText>
</Data>
使用Groovy的XmlSlurper
我需要做到以下几点:
从Data
开始发现其中包含了该元素值Field #1
在<DataFieldName>
元素中。如果找到,则获得属于同一级别的相应<DataFieldValue>
的值。
答
如果DataFieldName是在一个文件中唯一:
println new XmlSlurper()
.parseText(xml)
.DataFieldText.find {it.DataFieldName == "Field #1"}
.DataFieldValue.text()
如果不是,你想与所有匹配DataFieldValues数组:
println new XmlSlurper()
.parseText(xml)
.DataFieldText.findAll {it.DataFieldName == "Field #1"}*.DataFieldValue*.text()
答
def xml = """<Data>
<DataFieldText>
<DataFieldName>Field #1</DataFieldName>
<DataFieldValue>1</DataFieldValue>
</DataFieldText>
<DataFieldText>
<DataFieldName>Field #2</DataFieldName>
<DataFieldValue>2</DataFieldValue>
</DataFieldText>
<DataFieldText>
<DataFieldName>Field #3</DataFieldName>
<DataFieldValue>3</DataFieldValue>
</DataFieldText>
</Data>"""
def payload = new XmlSlurper().parseText(xml)
def node = payload.'**'.find() { myNode -> myNode.DataFieldName.text() == 'Field #1' }
value = node.DataFieldValue?.text()
println "${value}\n"
+0
欢迎来到*。当您提供答案时,请附上一些关于您答案的工作原理以及与以前答案不同的文字。 – buczek
非常令人印象深刻,读后这我觉得不得不去重构我所有的XmlSlurper代码(诅咒你) –
是不是'NodeChildren'的List?更好的可能是:'new XmlSlurper()。parseText(xml).DataFieldText.findAll {it.DataFieldName.text()=='Field#1'} * .DataFieldValue * .text()' –