void CDSObject::toXml(QTextStream &os, FilterMap &filter) const { QString sEndTag = ""; bool bFilter = true; if (filter.indexOf( "*" ) != -1) bFilter = false; switch( m_eType ) { case OT_Container: { os << "<container id=\"" << m_sId << "\" parentID=\"" << m_sParentId << "\" childCount=\"" << GetChildCount() << "\" restricted=\"" << GetBool( m_bRestricted ) << "\" searchable=\"" << GetBool( m_bSearchable ) << "\" >"; sEndTag = "</container>"; break; } case OT_Item: { os << "<item id=\"" << m_sId << "\" parentID=\"" << m_sParentId << "\" restricted=\"" << GetBool( m_bRestricted ) << "\" >"; sEndTag = "</item>"; break; } default: break; } os << "<dc:title>" << m_sTitle << "</dc:title>"; os << "<upnp:class>" << m_sClass << "</upnp:class>"; // ---------------------------------------------------------------------- // Output all Properties // ---------------------------------------------------------------------- Properties::const_iterator it = m_properties.begin(); for (; it != m_properties.end(); ++it) { const Property *pProp = *it; if (pProp->m_bRequired || (pProp->m_sValue.length() > 0)) { QString sName; if (pProp->m_sNameSpace.length() > 0) sName = pProp->m_sNameSpace + ':' + pProp->m_sName; else sName = pProp->m_sName; if (pProp->m_bRequired || !bFilter || ( filter.indexOf( sName ) != -1)) { os << "<" << sName; NameValues::const_iterator nit = pProp->m_lstAttributes.begin(); for (; nit != pProp->m_lstAttributes.end(); ++ nit) os << " " <<(*nit).sName << "=\"" << (*nit).sValue << "\""; os << ">"; os << pProp->m_sValue; os << "</" << sName << ">"; } } } // ---------------------------------------------------------------------- // Output any Res Elements // ---------------------------------------------------------------------- Resources::const_iterator rit = m_resources.begin(); for (; rit != m_resources.end(); ++rit) { os << "<res protocolInfo=\"" << (*rit)->m_sProtocolInfo << "\" "; NameValues::const_iterator nit = (*rit)->m_lstAttributes.begin(); for (; nit != (*rit)->m_lstAttributes.end(); ++ nit) os << (*nit).sName << "=\"" << (*nit).sValue << "\" "; os << ">" << (*rit)->m_sURI; os << "</res>\r\n"; } // ---------------------------------------------------------------------- // Output any children // ---------------------------------------------------------------------- CDSObjects::const_iterator cit = m_children.begin(); for (; cit != m_children.end(); ++cit) (*cit)->toXml(os, filter); // ---------------------------------------------------------------------- // Close Element Tag // ---------------------------------------------------------------------- os << sEndTag; os << flush; }