Forum Discussion
Testranger
14 years agoContributor
Hi McDonald,
I managed to get this working myself. here is the code for your reference. Thanks for all your help.
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.w3c.dom.Element
import org.w3c.dom.Node
import org.w3c.dom.NodeList
import org.xml.sax.InputSource
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
def tc = testRunner.testCase;
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
// create request XmlHolder
def requestHolder = groovyUtils.getXmlHolder("updateRequest#Request")
// find the Node that I am interested in
def requestNode = requestHolder.getDomNode("//ns22:updateRequest")
//def requestNode = requestHolder.getDomNode("//*:updateRequest[1]/*:data")
//log.info requestNode.toString()
def toadd = '''
<ns22:references xmlns="http://test.com/rpdesktop/faults/" xmlns:ns2="http://test.com/ws/2010/08/Common" xmlns:ns3="http://test.com/dataservices/ws/2011/09/Order" xmlns:ns4="http://test.com.au/rpservices/ws/2010/08/StructuredAddress" xmlns:ns5="http://test.com.au/rpservices/ws/2010/08/DigitalResource" xmlns:ns6="http://test.com.au/rpservices/ws/2010/08/ExternalReference" xmlns:ns7="http://test.com.au/rpservices/ws/2010/08/CommonEntity" xmlns:ns8="http://test.com.au/rpservices/ws/2010/08/IndividualEntity" xmlns:ns9="http://test.com.au/rpservices/ws/2010/08/User" xmlns:ns10="http://test.com.au/rpservices/ws/2010/08/SystemEntity" xmlns:ns11="http://test.com.au/rpservices/ws/2010/08/OrganisationEntity" xmlns:ns12="http://test.com.au/rpservices/ws/2010/08/Lender" xmlns:ns13="http://test.com.au/rpservices/ws/2010/08/MortgageManager" xmlns:ns14="http://test.com.au/rpservices/ws/2010/08/ValuationFirm" xmlns:ns15="http://test.com/dataservices/ws/2011/01/Security" xmlns:ns16="http://test.com.au/rpservices/ws/2010/08/Valuer" xmlns:ns17="http://test.com.au/rpservices/ws/2010/08/MortgageBroker" xmlns:ns18="http://test.com/dataservices/ws/2011/09/Valuation" xmlns:ns19="http://test.com.au/rpservices/ws/2010/08/Property" xmlns:ns20="http://test.com.au/rpservices/ws/2010/08/Parcel" xmlns:ns21="http://test.com.au/rpservices/ws/2010/08/Transfer" xmlns:ns22="http://test.com/rpdesktop/messages/" xmlns:xmime="http://www.w3.org/2005/05/xmlmime">
<ns22:reference xsi:type="ns19:PropertyFeature" ns19:xmlId="X0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns19:feature>BATHZZZ</ns19:feature>
<ns19:value>1</ns19:value>
</ns22:reference>
<ns22:reference xsi:type="ns19:PropertyFeature" ns19:xmlId="X1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns19:feature>BED</ns19:feature>
<ns19:value>3</ns19:value>
</ns22:reference>
</ns22:references>
'''
def requestDoc = requestNode.getOwnerDocument()
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true)
DocumentBuilder builderFrag = dbf.newDocumentBuilder();
Document docFrag = builderFrag.parse(new InputSource(new StringReader(toadd.toString())));
Element elementDocFrag = docFrag.getDocumentElement();
//log.info elementDocFrag
//NodeList children = elementDocFrag.getChildNodes();
//log.info "There are "+children.getLength()+" child elements."
for (Node child = elementDocFrag.getFirstChild();child != null;child = child.getNextSibling()) {
if (child.getNodeType() == child.TEXT_NODE){
//log.info "Text: "+child.getNodeValue()
} else if (child.getNodeType() == child.ELEMENT_NODE) {
Node tempNode = requestDoc.importNode(child, true);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringWriter sw = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(tempNode), new StreamResult(sw));
//log.info sw.toString()
requestNode.appendChild(tempNode)
}
}
requestHolder.updateProperty(true)
Regards,
Testranger
I managed to get this working myself. here is the code for your reference. Thanks for all your help.
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.w3c.dom.Element
import org.w3c.dom.Node
import org.w3c.dom.NodeList
import org.xml.sax.InputSource
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
def tc = testRunner.testCase;
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
// create request XmlHolder
def requestHolder = groovyUtils.getXmlHolder("updateRequest#Request")
// find the Node that I am interested in
def requestNode = requestHolder.getDomNode("//ns22:updateRequest")
//def requestNode = requestHolder.getDomNode("//*:updateRequest[1]/*:data")
//log.info requestNode.toString()
def toadd = '''
<ns22:references xmlns="http://test.com/rpdesktop/faults/" xmlns:ns2="http://test.com/ws/2010/08/Common" xmlns:ns3="http://test.com/dataservices/ws/2011/09/Order" xmlns:ns4="http://test.com.au/rpservices/ws/2010/08/StructuredAddress" xmlns:ns5="http://test.com.au/rpservices/ws/2010/08/DigitalResource" xmlns:ns6="http://test.com.au/rpservices/ws/2010/08/ExternalReference" xmlns:ns7="http://test.com.au/rpservices/ws/2010/08/CommonEntity" xmlns:ns8="http://test.com.au/rpservices/ws/2010/08/IndividualEntity" xmlns:ns9="http://test.com.au/rpservices/ws/2010/08/User" xmlns:ns10="http://test.com.au/rpservices/ws/2010/08/SystemEntity" xmlns:ns11="http://test.com.au/rpservices/ws/2010/08/OrganisationEntity" xmlns:ns12="http://test.com.au/rpservices/ws/2010/08/Lender" xmlns:ns13="http://test.com.au/rpservices/ws/2010/08/MortgageManager" xmlns:ns14="http://test.com.au/rpservices/ws/2010/08/ValuationFirm" xmlns:ns15="http://test.com/dataservices/ws/2011/01/Security" xmlns:ns16="http://test.com.au/rpservices/ws/2010/08/Valuer" xmlns:ns17="http://test.com.au/rpservices/ws/2010/08/MortgageBroker" xmlns:ns18="http://test.com/dataservices/ws/2011/09/Valuation" xmlns:ns19="http://test.com.au/rpservices/ws/2010/08/Property" xmlns:ns20="http://test.com.au/rpservices/ws/2010/08/Parcel" xmlns:ns21="http://test.com.au/rpservices/ws/2010/08/Transfer" xmlns:ns22="http://test.com/rpdesktop/messages/" xmlns:xmime="http://www.w3.org/2005/05/xmlmime">
<ns22:reference xsi:type="ns19:PropertyFeature" ns19:xmlId="X0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns19:feature>BATHZZZ</ns19:feature>
<ns19:value>1</ns19:value>
</ns22:reference>
<ns22:reference xsi:type="ns19:PropertyFeature" ns19:xmlId="X1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns19:feature>BED</ns19:feature>
<ns19:value>3</ns19:value>
</ns22:reference>
</ns22:references>
'''
def requestDoc = requestNode.getOwnerDocument()
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true)
DocumentBuilder builderFrag = dbf.newDocumentBuilder();
Document docFrag = builderFrag.parse(new InputSource(new StringReader(toadd.toString())));
Element elementDocFrag = docFrag.getDocumentElement();
//log.info elementDocFrag
//NodeList children = elementDocFrag.getChildNodes();
//log.info "There are "+children.getLength()+" child elements."
for (Node child = elementDocFrag.getFirstChild();child != null;child = child.getNextSibling()) {
if (child.getNodeType() == child.TEXT_NODE){
//log.info "Text: "+child.getNodeValue()
} else if (child.getNodeType() == child.ELEMENT_NODE) {
Node tempNode = requestDoc.importNode(child, true);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringWriter sw = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(tempNode), new StreamResult(sw));
//log.info sw.toString()
requestNode.appendChild(tempNode)
}
}
requestHolder.updateProperty(true)
Regards,
Testranger