繁体   English   中英

使用Groovy在日志文件中定义多个XML行

[英]Defining multiple XML rows in log file with Groovy

我正在尝试创建一个脚本,该脚本将搜索包含多个xml标记的xml原始请求,并将结果复制到SoapUI中的外部文件或自定义属性。

目前,我正在尝试这样做:

 // read the file from path
def file = new File('PathToLogFile.log')

def data= file.filterLine { 
    it =~ /(?ms)(<OpeningRequestTag">[\s\S]*?<\/ClosingRequestTag)/
}

问题是它无法读取包含这些开始和结束标签的块,这有点奇怪,因为我检查了regex101的正则表达式定义并找到了我所需要的。

我也尝试过

def data= file.filterLine { 
        it =~ /(?ms)(<OpeningRequesTag">[\s\S]*?<\/ClosingRequestTag)/

但是再次-nu luck :(。您能告诉我为了选择我想要的set或xml标记应该更改什么吗?请注意,开始和结束标记也有所不同并且不相同-开头标记包含其他信息。 看起来像 :

<RequestTag 343.75676.76.767>
.
.
.
<RequestTag>

谢谢!

假设您的示例XML是

 POST https://www.udzial.com HTTP/1.1
 Accept-Encoding: gzip,deflate
 Content-Type: text/xml;charset=UTF-8
 SOAPAction: http://www.udzial.com
 Content-Length: 69476
 Host: www.udzial.com
 Connection: Keep-Alive
 User-Agent: Apache-HttpClient/4.5.2 (Java/1.7.0_162)
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

我们说它是Request1RawRequest的一部分。 Request1是soapui中请求的名称

然后下面的代码可以根据开始和结束标记提取xml

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def xml=groovyUtils.getXmlHolder("Request1#RawRequest")
String string = xml.getXml()
String starttag="to"
String endtag="heading"
//log.info string

def extract= (string =~  /(?s)<${starttag}.*?${endtag}>/)

log.info extract[0]

上面代码的输出是

Mon Jul 16 17:14:39 IST 2018: INFO: <to>Tove</to>
<from>Jani</from>
<heading>

您的代码中可能存在2个问题

  1. “无需使用正则表达式
  2. $应该用于正则表达式中的变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM