Forum Discussion
Testranger
14 years agoContributor
What you've suggested looks too simple to be true. Will try it.
For the time being though will use the following approaches as they seem to work for both insert scenarios I'm using
1. For inserting a whole fragment
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true)
DocumentBuilder builderFrag = dbf.newDocumentBuilder();
Document docFrag = builderFrag.parse(new InputSource(new StringReader(xmlString)));
Element elementDocFrag = docFrag.getDocumentElement();
//log.info elementDocFrag
//append comparable xml text above to order
def comparableNode = requestHolder.getDomNode("//ns22:updateRequest[1]/ns22:data[1]/ns18:comparableSale[5]")
if (comparableNode == null) {
Node tempNode2 = requestDoc.importNode(elementDocFrag, true);
Transformer transformer2 = TransformerFactory.newInstance().newTransformer();
StringWriter sw2 = new StringWriter();
transformer2.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer2.transform(new DOMSource(tempNode2), new StreamResult(sw2));
//log.info sw2.toString()
requestNode.appendChild(tempNode2)
requestHolder.updateProperty(true)
}
2. For iterating/inserting children of a fragment
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true)
DocumentBuilder builderFrag = dbf.newDocumentBuilder();
Document docFrag = builderFrag.parse(new InputSource(new StringReader(xmlString)));
Element elementDocFrag = docFrag.getDocumentElement();
//log.info elementDocFrag
//NodeList children = elementDocFrag.getChildNodes();
//log.info "There are "+children.getLength()+" child elements."
def nodeReference = requestHolder.getDomNode("//ns22:updateRequest[1]/ns22:data[1]/ns18:riskAnalysis[1]")
if (nodeReference == null) {
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)
}
Thanks for the help.
Best Regards,
Testranger
For the time being though will use the following approaches as they seem to work for both insert scenarios I'm using
1. For inserting a whole fragment
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true)
DocumentBuilder builderFrag = dbf.newDocumentBuilder();
Document docFrag = builderFrag.parse(new InputSource(new StringReader(xmlString)));
Element elementDocFrag = docFrag.getDocumentElement();
//log.info elementDocFrag
//append comparable xml text above to order
def comparableNode = requestHolder.getDomNode("//ns22:updateRequest[1]/ns22:data[1]/ns18:comparableSale[5]")
if (comparableNode == null) {
Node tempNode2 = requestDoc.importNode(elementDocFrag, true);
Transformer transformer2 = TransformerFactory.newInstance().newTransformer();
StringWriter sw2 = new StringWriter();
transformer2.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer2.transform(new DOMSource(tempNode2), new StreamResult(sw2));
//log.info sw2.toString()
requestNode.appendChild(tempNode2)
requestHolder.updateProperty(true)
}
2. For iterating/inserting children of a fragment
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true)
DocumentBuilder builderFrag = dbf.newDocumentBuilder();
Document docFrag = builderFrag.parse(new InputSource(new StringReader(xmlString)));
Element elementDocFrag = docFrag.getDocumentElement();
//log.info elementDocFrag
//NodeList children = elementDocFrag.getChildNodes();
//log.info "There are "+children.getLength()+" child elements."
def nodeReference = requestHolder.getDomNode("//ns22:updateRequest[1]/ns22:data[1]/ns18:riskAnalysis[1]")
if (nodeReference == null) {
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)
}
Thanks for the help.
Best Regards,
Testranger