Groovy Jmeter在列表中收集XML元素

Groovy Jmeter在列表中收集XML元素,groovy,Groovy,我有一个xml字符串,它是从HTTP的响应中得到的,如下所示 <?xml version="1.0" encoding="utf-8"?> <Specification xmlns="TestSpecification.xsd"> <Cases> <Case> <Name>foo</Name> <Desc>foo1</Desc> &l

我有一个xml字符串,它是从HTTP的响应中得到的,如下所示

    <?xml version="1.0" encoding="utf-8"?>
<Specification xmlns="TestSpecification.xsd">
  <Cases>
    <Case>
        <Name>foo</Name>
        <Desc>foo1</Desc>
        <Begin>
          <ABC>0</ABC>
          <DEF>0</DEF>
        </Begin>
        <Perms>
            <TYPE1>
              <ABC>7</ABC>
              <DEF>8</DEF>
            </TYPE1>
            <TYPE2>
              <Perm>
                <PermNo>1</PermNo>
                <Description>Perm 1</Description>
                <ABC>5</ABC>
                <DEF>0</DEF>
                <GHI>1</GHI>
                <JKL>2</JKL>
              </Perm>
              <Perm>
                <PermNo>2</PermNo>
                <Description>Perm 1</Description>
                <ABC>5</ABC>
                <DEF>0</DEF>
                <GHI>1</GHI>
                <JKL>2</JKL>
              </Perm>
              <Perm>
                <PermNo>2</PermNo>
                <Description>Perm 1</Description>
                <ABC>5</ABC>
                <DEF>0</DEF>
                <GHI>3</GHI>
                <JKL>4</JKL>                
              </Perm>
            </TYPE2>          
        </Perms>    
    </Case>
  </Cases>
</Specification>        

福
foo1
0
0
7.
8.
1.
烫发1
5.
0
1.
2.
2.
烫发1
5.
0
1.
2.
2.
烫发1
5.
0
3.
4.
我需要能够检索一个列表中(ABC的DEF、GHI等)之间的所有元素。我如何才能做到这一点。注意:perm是可变的,可以是x多个

我在一个循环中尝试了这一点,将开始和结束索引以及每个块作为“细节”来获取数据,但我担心它可能很脆弱

ABC= (detail =~ "ABC>(.*)</ABC")[0][1]
ABC=(detail=~“ABC>(.*)这将完成任务:

package test
/**
 * A simple application that parses a String that contains XML information using XmlSlurper.
 */
class Test {
    static stringXML = '''
  <Cases>
    <Case>
        <Name>foo</Name>
        <Desc>foo1</Desc>
        <Begin>
          <ABC>0</ABC>
          <DEF>0</DEF>
        </Begin>
        <Perms>
            <TYPE1>
              <ABC>7</ABC>
              <DEF>8</DEF>
            </TYPE1>
            <TYPE2>
              <Perm>
                <PermNo>1</PermNo>
                <Description>Perm 1</Description>
                <ABC>5</ABC>
                <DEF>0</DEF>
                <GHI>1</GHI>
                <JKL>2</JKL>
              </Perm>
              <Perm>
                <PermNo>2</PermNo>
                <Description>Perm 1</Description>
                <ABC>5</ABC>
                <DEF>0</DEF>
                <GHI>1</GHI>
                <JKL>2</JKL>
              </Perm>
              <Perm>
                <PermNo>2</PermNo>
                <Description>Perm 1</Description>
                <ABC>5</ABC>
                <DEF>0</DEF>
                <GHI>3</GHI>
                <JKL>4</JKL>
              </Perm>
            </TYPE2>
        </Perms>
    </Case>
  </Cases>
'''
   static main(args) {    
    def cases = new XmlSlurper().parseText(stringXML)
    def all = []
    ['ABC', 'DEF', 'GHI', 'JKL'].each{ tag ->
      def list = cases.depthFirst().findAll { it.name() == tag }
      println tag + ":" + list
      all += list
    }
    println all

    }
}
包测试
/**
*使用XmlSlurper解析包含XML信息的字符串的简单应用程序。
*/
课堂测试{
静态stringXML=''
福
foo1
0
0
7.
8.
1.
烫发1
5.
0
1.
2.
2.
烫发1
5.
0
1.
2.
2.
烫发1
5.
0
3.
4.
'''
静态主(args){
def cases=new XmlSlurper().parseText(stringXML)
def all=[]
['ABC','DEF','GHI','JKL']。每个{tag->
def list=cases.depthFirst().findAll{it.name()==tag}
println标记+“:”+列表
全部+=列表
}
全部打印
}
}

设置标记列表,然后使用
每个
案例
变量对其进行迭代,变量包含已解析的xml,使用depthFirst,您将获得所有节点,然后使用findAll对这些节点进行筛选以匹配节点名。

您提供的xml不是可解析的xml。请提供正确的xml。我使用的是伪值,这里的值不是问题,structurxml的e是一个问题。例如,您没有关闭或…是的,我刚刚修复了它