One way to do it:
Response XML
<info>
<item index="1">
<itemContent index="1">asdfasd</itemContent>
<itemContent index="2">wertywe</itemContent>
</item>
<item index="2">
<itemContent index="1">ae344qwer</itemContent>
<itemContent index="2">w64534</itemContent>
</item>
</info>
Groovy script to rename the first node (adapted from
http://stackoverflow.com/a/4956151:)
import javax.xml.transform.Transformer
import javax.xml.transform.TransformerFactory
import javax.xml.transform.OutputKeys
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.parsers.DocumentBuilder
import org.w3c.dom.Document
import org.xml.sax.InputSource
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
def gu = new com.eviware.soapui.support.GroovyUtils( context )
def resp = context.expand( '${HTTP Test Request#Response#/info/item[1]}' )
// parse String as DOM
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader(resp)));
// modify DOM
doc.renameNode(doc.getDocumentElement(), null, "myItem");
// output DOM as String
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringWriter sw = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(doc), new StreamResult(sw));
def newNode = sw.toString();
return newNode
Request with property expansion:
<newInfo>${Groovy Script#result}</newInfo>Expanded request with renamed node:
<newInfo>
<myItem index="1">
<itemContent index="1">asdfasd</itemContent>
<itemContent index="2">wertywe</itemContent>
</myItem>
</newInfo>