Groovy xml基于父模式属性选择子节点属性

Groovy xml基于父模式属性选择子节点属性,groovy,xml-parsing,Groovy,Xml Parsing,我有一个这样的xml结构 <JJJ version="2.0" > <Data > <Object class="classX"> <k name="constname1">variable1</p> <k name="constname2">variable2</p> <k name="constname3">variable3</p> </Object> &

我有一个这样的xml结构

<JJJ version="2.0" >
<Data >
 <Object class="classX">
  <k name="constname1">variable1</p>
  <k name="constname2">variable2</p>
  <k name="constname3">variable3</p>
</Object>
 <Object class="classY">
  <k name="constname1">variable11</p>
  <k name="constname2">variable12</p>
  <k name="constname3">variable13</p>
</Object>
def testme= mytest.'k'.find{ it.@name.text()=="constname1"}
这是有效的。但是我需要做一些类似的事情,而不是在循环中复制文本

<JJJ version="2.0" >
<Data >
 <Object class="classX">
  <k name="constname1">variable1</p>
  <k name="constname2">variable2</p>
  <k name="constname3">variable3</p>
</Object>
 <Object class="classY">
  <k name="constname1">variable11</p>
  <k name="constname2">variable12</p>
  <k name="constname3">variable13</p>
</Object>
def testme= mytest.'k'.find{ it.@name.text()=="constname1"}
这一点我说得不对

然而,下面的答案是正确的

      println mymo.'k'.find{it.@name.text()=="constname1"}

但是我想将选择限制为classX的节点

更正xml使其有效,给出:

def xml = '''<JJJ version="2.0" >
            |  <Data >
            |    <Object class="classX">
            |      <k name="constname1">variable1</k>
            |      <k name="constname2">variable2</k>
            |      <k name="constname3">variable3</k>
            |    </Object>
            |    <Object class="classY">
            |      <k name="constname1">variable14</k>
            |      <k name="constname2">variable15</k>
            |      <k name="constname3">variable16</k>
            |    </Object>
            |    <Object class="classX">
            |      <k name="constname1">variable7</k>
            |      <k name="constname2">variable8</k>
            |      <k name="constname3">variable9</k>
            |    </Object>
            |  </Data>
            |</JJJ>'''.stripMargin()

List var = new XmlSlurper().parseText( xml ).'**'.grep { 
  it.@name == 'constname1' && it.parent().@class == 'classX'
}

assert var == [ 'variable1', 'variable7' ]
defxml=''
|  
|    
|变量1
|变量2
|变量3
|    
|    
|可变的
|可变的15
|可变16
|    
|    
|可变7
|变量8
|可变的
|    
|  
|''.stripMargin()
List var=new XmlSlurper().parseText(xml)。'**'.grep{
它。@name='constname1'&&it.parent()。@class=='classX'
}
断言变量==['variable1','variable7']

这就是你想要的吗?我想正确的方法是

mytest'k'。查找{it.['@name']==“constname1”}


对其他一些xml链接也做了类似的处理-->

好的,ClassX可以有更多的节点,我需要使用.findAll;然而,它不起作用;基本上,我需要得到包含classX的所有类的列表,比如
def mytest=mymo.findAll{it.@class.text()==“classX”}然后在上执行“查找”that@alexcpn您能否更新您的问题,以便示例显示您实际拥有的内容以及您需要的结果?@alexcpn更新了我的答案。。。离这儿近吗?