XML Parser Groovy

时间:2014-09-18 09:22:22

标签: groovy soapui

我在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>的价值。谢谢

2 个答案:

答案 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,你帮我一半!