Saturday, April 15, 2017

AX 2012 : Remove an XML node through X++

Following code snippet may help you to remove an XML node from an XML message string.


private str removeXMLTag(str xml)
{
    XmlDocument         doc = new XmlDocument();
    XmlElement          nodeScript;
    XmlNode             parentNode, childNode;
    XmlNodeList         xmlScriptList,
                        parentNodeList,
                        childNodeList;

    int                 i,j;

    doc.loadXml(xml);

    // Get the root element and its child nodes
    nodeScript = doc.getNamedElement("SalesOrder");
    xmlScriptList = nodeScript.childNodes();

    for(i=0; i < xmlScriptList.length(); i++)
    {
        parentNode = xmlScriptList.item(i);
        childNodeList = parentNode.childNodes();

        for (j=0; j < childNodeList.length(); j++)
        {
            childNode = childNodeList.item(j);
            if (childNode.selectSingleNode("Notes"))
            {
                parentNode.removeChild(childNode);
            }
        }
    }

    return doc.outerXml();
}

This will remove DocuRef node along with its child nodes. 

Original XML message

<?xml version="1.0" encoding="utf-8"?>                            
<SalesOrder xmlns = "http://schemas.microsoft.com/dynamics/2008/01/documents/SalesOrder">                                        
<DocuRef class = "entity">
        <Notes>Business Name</Notes>
</DocuRef>

</SalesOrder>

XML message after node being removed

<?xml version="1.0" encoding="utf-8"?>                            
<SalesOrder xmlns = "http://schemas.microsoft.com/dynamics/2008/01/documents/SalesOrder">                                  
</SalesOrder>