Пример #1
0
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;
}