12

假设有以下 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>

使用 GroovyXmlSlurper我需要执行以下操作:

Data查找包含元素中的值Field #1<DataFieldName>元素开始。如果找到则获取<DataFieldValue>属于同一级别的对应值。

4

2 回答 2

18

如果 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()
于 2011-11-30T09:58:45.750 回答
0
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"    
于 2016-12-07T16:33:21.490 回答