Beispiel #1
0
CXmlItem* CXmlItem::SetItemValue(const CString& sName, const CString& sValue, XI_TYPE nType)
{
	CXmlItem* pXI = GetItem(sName);
	
	if (!pXI)
		return AddItem(sName, sValue, nType);
	
	// else already exists
	pXI->SetValue(sValue);
	pXI->SetType(nType);
	
	return pXI;
}
Beispiel #2
0
BOOL CXmlFile::ParseItem(CXmlItem& xi, CXmlNodeWrapper* pNode)
{
	CStringArray aNames, aValues;
	
	int nNumAttrib = pNode->GetAttributes(aNames, aValues);
	
	for (int nAttrib = 0; nAttrib < nNumAttrib; nAttrib++)
	{
		const CString& sName = aNames[nAttrib];
		const CString& sVal = aValues[nAttrib];
		
		xi.AddItem(sName, sVal);
		
		if (!ContinueParsing(sName, sVal))
			return TRUE;
	}
	
	CXmlNodeWrapper nodeChild(pNode->GetFirstChildNode());
	
	//for (int nNode = 0; nNode < nNumNodes; nNode++)
	while (nodeChild.IsValid())
	{
		CString sName(nodeChild.Name());
		CString sVal(nodeChild.GetText());
		
		// Valik - Fully qualify NODE_CDATA_SECTION to prevent an ambiguous symbol error (C2872) in VC 7.1
		int nNodeType = nodeChild.NodeTypeVal();
		XI_TYPE nType = XIT_ELEMENT;
		
		if (nNodeType == MSXML2::NODE_CDATA_SECTION)
			nType = XIT_CDATA;
		
		else if (nNodeType == MSXML2::NODE_ATTRIBUTE)
			nType = XIT_ATTRIB;
		
		// if sName is empty then sVal relates to pNode
		if (!sName.IsEmpty())
		{
			CXmlItem* pXI = xi.AddItem(sName, sVal, nType);
			
			if (!ContinueParsing(sName, sVal))
				return TRUE;
			
			ParseItem(*pXI, &nodeChild);
		}
		// need to take care here not to overwrite a node's value by carriage returns
		// which can result if we load the XML preserving whitespace
		else
		{
			//BOOL bHasValue = (xi.GetValueLen() != 0);
			//BOOL bValueIsCR = (sVal == "\n");
			
			//if (nodeChild.IsPreservingWhiteSpace() && bHasValue && bValueIsCR)
			if (nodeChild.IsPreservingWhiteSpace() && (xi.GetValueLen() != 0) && (sVal == "\n"))
			{
				// ignore
				ASSERT(1); // for debugging
			}
			else
			{
				xi.SetValue(sVal);
				xi.SetType(nType);
			}
		}
		
		nodeChild = nodeChild.GetNextSibling();
	}
	
	return TRUE;
}