Groovy xml基于父模式属性选择子节点属性
我有一个这样的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> &
<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更新了我的答案。。。离这儿近吗?