Преобразование HTML в XML - C#

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста как такое можно сделать средствами .NET, пытаюсь найти объект HTMLDOM, но пока тщетно, а то бы через объектную модель перегнал.

Решение задачи: «Преобразование HTML в XML»

textual
Листинг программы
using System;
using System.IO;
using mshtml;
using System.Xml;
 
class Html2Xml
{
    static void Main()
    {
        StreamReader srReadToEnd = new StreamReader((System.IO.Stream)File.OpenRead('test.html'), System.Text.Encoding.GetEncoding('windows-1251'));
        string html;
        html = srReadToEnd.ReadToEnd();
        srReadToEnd.Close();
        
        IHTMLDocument2 document = new HTMLDocumentClass();
        document.write(html);
 
        XmlDocument doc = new XmlDocument();
        XmlNode root = doc.CreateElement('document');
 
        getChild((XmlNode)root, (IHTMLDOMNode)document.body.parentElement);
        doc.AppendChild(root);
        Console.Write(root.OuterXml);
    }
 
    static void getChild(XmlNode node, IHTMLDOMNode domnode)
    {
        string nodeName = domnode.nodeName.ToLower();
        if(nodeName == '#comment')
        {
            XmlNode comment = node.OwnerDocument.CreateNode(XmlNodeType.Comment, '', '');
            comment.InnerText = domnode.nodeValue.ToString().Replace('--', '=='); // побочный эффект
            node.AppendChild(comment);
        }
        else if(nodeName == '#text')
        {
            XmlNode text = node.OwnerDocument.CreateNode(XmlNodeType.Text, '', '');
            text.InnerText = domnode.nodeValue.ToString();
            node.AppendChild(text);
        } 
        else if(nodeName.IndexOf('/') >= 0)
        {
            XmlNode comment = node.OwnerDocument.CreateNode(XmlNodeType.Comment, '', '');
            comment.InnerText = '[ERROR]' + nodeName + '[/ERROR]';
            node.AppendChild(comment);
            //Console.WriteLine('ERROR: ' + nodeName);
        }
        else
        {
            XmlNode nodeCurrent = node.OwnerDocument.CreateElement(nodeName);
 
            IHTMLAttributeCollection collectionAttr = (IHTMLAttributeCollection)domnode.attributes;
            if(collectionAttr != null)
            {
                for(int i = 0; i < collectionAttr.length; i ++)
                {
                    object index = i;
                    IHTMLDOMAttribute attribute = (IHTMLDOMAttribute)collectionAttr.item(ref index);
                    if(attribute.nodeValue != null && attribute.nodeValue.ToString() != '')
                    {
                        XmlAttribute attr = node.OwnerDocument.CreateAttribute(attribute.nodeName.ToLower());
                        attr.Value = attribute.nodeValue.ToString().Replace('about:blank', ''); // побочный эффект
                        nodeCurrent.Attributes.Append(attr);
                    }
                }
            }
            IHTMLDOMChildrenCollection collection = (IHTMLDOMChildrenCollection)domnode.childNodes;
            for(int i = 0; i < collection.length; i ++)
            {
                getChild((XmlNode)nodeCurrent, (IHTMLDOMNode)collection.item(i));
            }
            node.AppendChild(nodeCurrent);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы