假设有以下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>
的值。
答案 0 :(得分:16)
如果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()
答案 1 :(得分:-1)
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"