예제 #1
0
        /// <summary>
        ///		Interpreta los nodos de un elemento
        /// </summary>
        private RDFEntry ParseEntry(MLNode objMLEntry, RDFChannel channel)
        {
            RDFEntry entry = new RDFEntry();

            // Interpreta los nodos
            foreach (MLNode node in objMLEntry.Nodes)
            {
                switch (node.Name)
                {
                case RDFConstTags.cnstStrItemTitle:
                    entry.Title = node.Value;
                    break;

                case RDFConstTags.cnstStrItemLink:
                    entry.Link = node.Value;
                    break;

                case RDFConstTags.cnstStrItemDescription:
                    entry.Content = node.Value;
                    break;

                case RDFConstTags.cnstStrItemDate:
                    entry.DateCreated = LibMarkupLanguage.Tools.DateTimeHelper.ParseRfc(node.Value, DateTime.Now);
                    break;

                default:
                    entry.Extensions.Parse(node, entry, channel.Dictionary);
                    break;
                }
            }
            // Devuelve la entrada
            return(entry);
        }
예제 #2
0
        /// <summary>
        ///		Convierte un archivo RDF en un archivo Atom
        /// </summary>
        public AtomChannel Convert(RDFChannel rdf)
        {
            AtomChannel channel = new AtomChannel();

            // Convierte los datos del canal
            channel.ID       = new Guid().ToString();
            channel.Title    = ConvertText(rdf.Title);
            channel.Info     = ConvertText(rdf.Description);
            channel.Subtitle = ConvertText("");
            channel.Links.Add(ConvertLink(rdf.Link, AtomLink.AtomLinkType.Self));
            // Añade las extensiones
            ConvertExtension(rdf.Extensions, channel.Extensions);
            // Añade las entradas
            ConvertEntries(rdf, channel);
            // Devuelve el objeto Atom
            return(channel);
        }
예제 #3
0
        /// <summary>
        ///		Obtiene el builder XML de un objeto RDF
        /// </summary>
        private MLFile GetFile(RDFChannel rdf)
        {
            MLFile file = new MLFile();
            MLNode node = file.Nodes.Add(RDFConstTags.cnstStrRoot);

            // Añade los atributos de la cabecera
            node.NameSpaces.AddRange(rdf.Extensions.GetNameSpaces(rdf));
            // Añade los datos del canal
            node = node.Nodes.Add(RDFConstTags.cnstStrChannel);
            // Obtiene el XML de los datos del canal
            node.Nodes.Add(RDFConstTags.cnstStrChannelTitle, rdf.Title);
            node.Nodes.Add(RDFConstTags.cnstStrChannelLink, rdf.Link);
            node.Nodes.Add(RDFConstTags.cnstStrChannelDescription, rdf.Description);
            // Obtiene el XML de las extensiones
            rdf.Extensions.AddNodesExtension(node);
            // Obtiene el XML de los elementos
            AddItems(node, rdf.Entries);
            // Devuelve los datos
            return(file);
        }
예제 #4
0
        /// <summary>
        ///		Convierte las entradas RDF en entradas Atom
        /// </summary>
        private void ConvertEntries(RDFChannel rdf, AtomChannel channel)
        {
            foreach (RDFEntry rdfEntry in rdf.Entries)
            {
                AtomEntry channelEntry = new AtomEntry();

                // Convierte los datos de la entrada
                channelEntry.ID            = rdfEntry.ID;
                channelEntry.Title         = ConvertText(rdfEntry.Title);
                channelEntry.Content       = ConvertText(rdfEntry.Content);
                channelEntry.DateIssued    = rdfEntry.DateCreated;
                channelEntry.DateCreated   = rdfEntry.DateCreated;
                channelEntry.DateModified  = rdfEntry.DateCreated;
                channelEntry.DateUpdated   = rdfEntry.DateCreated;
                channelEntry.DatePublished = rdfEntry.DateCreated;
                // Vínculos
                channelEntry.Links.Add(ConvertLink(rdfEntry.Link, AtomLink.AtomLinkType.Self));
                // Convierte las extensiones
                ConvertExtension(rdfEntry.Extensions, channelEntry.Extensions);
                // Añade la entrada al objeto Atom
                channel.Entries.Add(channelEntry);
            }
        }
예제 #5
0
        /// <summary>
        ///		Interpreta un archivo XML
        /// </summary>
        public RDFChannel Parse(MLFile fileML)
        {
            RDFChannel rdf = null;

            // Carga los datos del archivo
            if (fileML != null)
            {
                MLNode node = fileML.Nodes[RDFConstTags.cnstStrRoot];

                // Carga los datos del canal
                if (node != null && node.Name == RDFConstTags.cnstStrRoot)
                {
                    // Crea el objeto
                    rdf = new RDFChannel();
                    // Lee los espacios de nombres de las extensiones
                    rdf.Dictionary.LoadNameSpaces(node);
                    // Lee los datos del canal
                    foreach (MLNode channel in node.Nodes)
                    {
                        if (channel.Name.Equals(RDFConstTags.cnstStrChannel))
                        {
                            ParseChannel(channel, rdf);
                        }
                    }
                    // Lee los elementos
                    foreach (MLNode item in node.Nodes)
                    {
                        if (item.Name.Equals(RDFConstTags.cnstStrItem))
                        {
                            rdf.Entries.Add(ParseEntry(item, rdf));
                        }
                    }
                }
            }
            // Devuelve el objeto RDF
            return(rdf);
        }
예제 #6
0
        /// <summary>
        ///		Interpreta los datos del canal
        /// </summary>
        private void ParseChannel(MLNode channel, RDFChannel rdf)
        {
            foreach (MLNode node in channel.Nodes)
            {
                switch (node.Name)
                {
                case RDFConstTags.cnstStrChannelTitle:
                    rdf.Title = node.Value;
                    break;

                case RDFConstTags.cnstStrChannelDescription:
                    rdf.Description = node.Value;
                    break;

                case RDFConstTags.cnstStrChannelLink:
                    rdf.Link = node.Value;
                    break;

                default:
                    rdf.Extensions.Parse(node, rdf, rdf.Dictionary);
                    break;
                }
            }
        }
예제 #7
0
 /// <summary>
 ///		Graba los datos de un objeto RDF en un archivo XML
 /// </summary>
 public void Save(RDFChannel rdf, string fileName)
 {
     new XMLWriter().Save(fileName, GetFile(rdf));
 }
예제 #8
0
 /// <summary>
 ///		Obtiene el XML de un canal RDF
 /// </summary>
 public string GetXML(RDFChannel rdf)
 {
     return(GetFile(rdf).ToString());
 }