String AsXML(const XmlNode& node, dword style) { StringBuffer r; if(style & XML_HEADER) r << XmlHeader(); if(style & XML_DOCTYPE) for(int i = 0; i < node.GetCount(); i++) { const XmlNode& m = node.Node(i); if(m.GetType() == XML_TAG) { r << XmlDocType(m.GetText()); break; } } style &= ~(XML_HEADER|XML_DOCTYPE); switch(node.GetType()) { case XML_PI: r << "<?" << node.GetText() << "?>\r\n"; break; case XML_DECL: r << "<!" << node.GetText() << ">\r\n"; break; case XML_COMMENT: r << "<!--" << node.GetText() << "-->\r\n"; break; case XML_DOC: for(int i = 0; i < node.GetCount(); i++) r << AsXML(node.Node(i), style); break; case XML_TEXT: r << DeXml(node.GetText()); break; case XML_TAG: XmlTag tag(node.GetText()); for(int i = 0; i < node.GetAttrCount(); i++) tag(node.AttrId(i), node.Attr(i)); if(node.GetCount()) { StringBuffer body; for(int i = 0; i < node.GetCount(); i++) body << AsXML(node.Node(i), style); r << tag(~body); } else r << tag(); } return r; }
//[-------------------------------------------------------] //[ Protected virtual XmlTextElement functions ] //[-------------------------------------------------------] void XmlTextImage::OnParse(XmlNode &cXmlNode) { // Is this an XML element? if (cXmlNode.GetType() == XmlNode::Element) { // Destroy the previous image if (m_pImage) { delete m_pImage; m_pImage = nullptr; } // Get XML element XmlElement &cXmlElement = static_cast<XmlElement&>(cXmlNode); // Parse attributes XmlAttribute *pAttribute = cXmlElement.GetFirstAttribute(); while (pAttribute) { // Get name and value String sName = pAttribute->GetName(); String sValue = pAttribute->GetValue(); // Save attribute if (sName.CompareNoCase("Src")) { // Image filename m_sFilename = sValue; } else if (sName.CompareNoCase("Width")) { // Image width m_vSize.x = sValue.GetInt(); } if (sName.CompareNoCase("Height")) { // Image height m_vSize.y = sValue.GetInt(); } // Next attribute pAttribute = pAttribute->GetNext(); } } }