public ArrayList<DnBData> getDnBDataFromXml(String xml) throws ParseException, XPathExpressionException
	{
		/*
		 * D&B Failure Risk (Financial Stress) - FAIL_SCR
		 * D&B Rating - DNB_RATG
		 * D&B Failure Risk (Financial Stress) National percentile- NATL_PCTL or FAIL_SCR_NATL_PCTG ???
		 * Primary Name - PRIM_NME
		 * D&B Paydex - PAYD_SCR
		 * D&B Paydex Norm - PAYD_NORM
		 * Primary SIC = PRIM_SIC
		 * OUT_BUS_IND = Out of business indicator
		 *  * MAXIMUM CREDIT RECOMMENDATION   - MAX_CR
		 * MAXIMUM CREDIT CURRENCY CODE    - MAX_CR_CRCY_CD
		 * Default Currency Code 	- CRCY_CD
		 * Cash and Liquid Assets - CASH_LIQ_ASET
		 * Credit Delinquency Score National Percentile - DELQ_SCR_ENTR\SCR_GRP\NATL_PCTL 
		 * 
		 * Credit Delinquency Score Commentary - DELQ_SCR_ENTR\SCR_GRP\SCR_CMTY_CD then multiple ArrayOfstringItem
		 * Credit Delinquency Score Override - DELQ_SCR_ENTR\SCR_GRP\SCR_OVRD_CD
		 * * 
		 * Address Details
		 * 
		 * Adresss lines - ADR_LINE\ArrayOfstringItem
		 * Post Code - POST_CODE
		 * Postal Town - POST_TOWN
		 * Primary Geograpihic Area - PRIM_GEO_AREA
		 * Country - CTRY_CD
		 */
		XPath xpath = XPathFactory.newInstance().newXPath();
		ArrayList<DnBData> updateCollection = new ArrayList<DnBData>();
		//try
		//{
			NodeList nodes = (NodeList) xpath.evaluate("//GLBLMNSVCMSGSRSV1/GETNTFCTRNRS/GETNTFCRS/USERRS/PFLRS/ArrayOfPFLRSItem/REGNRS/ArrayOfREGNRSItem", XmlHelper.getXmlDocument(xml), XPathConstants.NODESET);
			for(int i=0;i<nodes.getLength();i++)
			{
				DnBData data = new DnBData();
				NodeList children = nodes.item(i).getChildNodes();
				Node ntfcrs = null;
				Node monprodrs = null;
				
				for(int j=0;j<children.getLength();j++)
				{
					if(children.item(j).getNodeName()=="DUNS_NBR")
					{
						data.setDunsNumber(XmlHelper.getIntegerFromXmlString(children.item(j).getTextContent()));
					}
					else if(children.item(j).getNodeName()=="PRIM_NME")
					{
						data.setName(XmlHelper.getStringFromXmlString(children.item(j).getTextContent()));
					}
					// 2 kinds of changes
					// ones read from incremental part of xml ( NTFCRS )
					// ones read from full snapshot of company xml ( MON_PROD_RS )
					// basically, facts are coming from increments
					// attributes are coming from full snapshot, this helps with nulling out values
					// Also, avoids resetting values back to default by mistake - e.g. is OutOfBusiness. DnBData sets this to false by default. This means that if no update to this field, then we'd be constantly resetting to false. There's other solutions to this, but reading full snapshot of data is easiest at the time.
					else if(children.item(j).getNodeName()=="NTFCRS")
					{
						ntfcrs = children.item(j);					
					}
					else if(children.item(j).getNodeName()=="MON_PROD_RS")
					{
						monprodrs = children.item(j);				
					}
				
				}
				// Need to do monprodrs before the ntfcrs node, because I need the currency to be filled in first
				if(monprodrs!=null)
					updateChangesFull(data, monprodrs);
				if(ntfcrs!=null)
					updateChangesIncremental(data, ntfcrs);
				updateCollection.add(data);
			}
		/*} 
		catch (XPathExpressionException e) 
		{
			e.printStackTrace();
		}
		catch(ParseException pe)
		{
			pe.printStackTrace();
		}*/
		
		return updateCollection;

	}