使用 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 :(。你能告诉我我应该改变什么才能 select 我想要的集合或 xml 标签吗?请注意,开始和结束标签也differ 和 are not the same - 起始标签包含附加信息。它看起来像:
<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>
假设它是 Request1 的 RawRequest 的一部分。 request1是soapui中的request名称
然后下面的代码可以根据开始和结束标签
提取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 个问题
- " 不需要正则表达式
- $ 应该用于正则表达式中的变量
我正在尝试创建一个脚本,该脚本将搜索包含多个 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 :(。你能告诉我我应该改变什么才能 select 我想要的集合或 xml 标签吗?请注意,开始和结束标签也differ 和 are not the same - 起始标签包含附加信息。它看起来像:
<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>
假设它是 Request1 的 RawRequest 的一部分。 request1是soapui中的request名称
然后下面的代码可以根据开始和结束标签
提取xmldef 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 个问题
- " 不需要正则表达式
- $ 应该用于正则表达式中的变量