我在SOAPUI中使用Groovy Script进行多次模拟服务。我试图通过groovy脚本修改XML文件,但它不起作用。请帮帮我
我想更改此文件中<STATUS>
的值
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns5:PCH1CRTO_REC xmlns:ns2="http://www.csc.smart/bo/schemas/Error" xmlns:ns3="http://www.csc.smart/bo/schemas/PCH1CRTI" xmlns:ns4="http://www.csc.smart/msp/schemas/MSPContext" xmlns:ns5="http://www.csc.smart/bo/schemas/PCH1CRTO" xmlns:ns6="http://www.csc.smart/bo/schemas/PCH1ENQI" xmlns:ns7="http://www.csc.smart/bo/schemas/PCH1ENQO">
<STATUS>0</STATUS>
我在SOAPUI中的groovy脚本
filePath = groovyUtils.projectPath + "\\Response-Client-Details\\Response-Policy-List\\Response-Policy-Details\\" + fileArray[i] + ".xml"
def root = xmlParser.parse(filePath)
接下来我要做什么?我尝试了很多方法,但它不起作用,甚至得到<STATUS>
的价值。谢谢
答案 0 :(得分:0)
所以你在root变量中有xml,现在你需要使用XPath访问你的STATUS元素,然后更新它
会是这样的(你也应该导入groovy.xml.XmlUtil)
def soapenv = new groovy.xml.Namespace("http://schemas.xmlsoap.org/soap/envelope/")
def ns5 = new groovy.xml.Namespace("http://www.csc.smart/bo/schemas/PCH1CRTO")
root[soapenv.Body][ns5.PCH1CRTO_REC].[STATUS][0].value = 1
将其保存回来,试试这个
def outputFile = groovyUtils.projectPath + "\\Response-Client-Details\\Response-Policy-List\\Response-Policy-Details\\" + fileArray[i] + ".xml"
def f = XmlUtil.serialize(root)
def of = new File(outputFile)
of.write(f, "UTF-8")
答案 1 :(得分:0)
我找到了最好的答案,试试这个:
log.info root[soapenv.Body][ns5.PCH1CRTO_REC].STATUS[0].text()
不
log.info root[soapenv.Body][ns5.PCH1CRTO_REC][STATUS][0].text()
然后保存
new XmlNodePrinter(new PrintWriter(new FileWriter(filePath))).print(root)
无论如何,非常感谢@mitomed,你帮我一半!