none
Автозамена HTML тегов RRS feed

  • Вопрос

  • Есть HTML документ, необходимо заменить теги в нем на свои.

    Например, в исходном документе есть

     

    <div id="123">

    <p class="mb20">

    исходный текст

    </p>

    </div>

    и надо это заменить на

    <p class="1">

    исходный текст

    </p>

     

    Как это можно реализовать?

    Пишу на C# в Visual Studio 2010.

     

    18 декабря 2011 г. 12:31

Ответы

  • > Есть HTML документ, необходимо заменить теги в нем на свои. [...] Например, в исходном документе есть <div id="123"><p class="mb20">исходный текст</p></div>и надо это заменить на<p class="1">исходный текст</p>

     

    using System.Windows.Forms;
    using System;
    
    namespace WindowsFormsApplication5
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                var html = @"
                <html>
                    <head><style>.x1 { border:1px solid navy;} </style></head>
                    <body>
                        <div id=""123"" style='border:1px solid red;'>
                            <p class=""mb20"">исходный текст</p>
                        </div>
                    </body>
                </html>";
                Action<HtmlDocument> update = doc =>
                    {
                        var div = doc.GetElementById("123");
                        if(div == null) return;
                        var p = div.FirstChild;
                        div.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterEnd, p);
                        p.SetAttribute("className", "x1");
                        ((dynamic)div.Parent.DomElement).removeChild(div.DomElement);
                    };
                var wb = new WebBrowser { Parent = this, Dock = DockStyle.Fill, DocumentText = html };
                this.Menu = new MainMenu();
                this.Menu.MenuItems.Add("Test1", (s, e) => 
                    {
                        wb.DocumentText = html;
                        while(wb.ReadyState != WebBrowserReadyState.Complete)
                            Application.DoEvents();
                        update(wb.Document);
                    });
                this.Menu.MenuItems.Add("Test2", delegate 
                {
                    new WebBrowser { DocumentText = html }
                        .DocumentCompleted += (s, e) =>
                        {
                            var b = s as WebBrowser;
                            update(b.Document);
                            wb.DocumentText = b.Document.Body.Parent.OuterHtml;
                        };
                });
                this.Menu.MenuItems.Add("Reset html", (s, e) => wb.DocumentText = html);
            }
        }
    }
    
     

    • Предложено в качестве ответа Malobukv 20 декабря 2011 г. 5:18
    • Помечено в качестве ответа Abolmasov Dmitry 27 декабря 2011 г. 13:07
    18 декабря 2011 г. 19:01

Все ответы

  • > Есть HTML документ, необходимо заменить теги в нем на свои. [...] Например, в исходном документе есть <div id="123"><p class="mb20">исходный текст</p></div>и надо это заменить на<p class="1">исходный текст</p>

     

    using System.Windows.Forms;
    using System;
    
    namespace WindowsFormsApplication5
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                var html = @"
                <html>
                    <head><style>.x1 { border:1px solid navy;} </style></head>
                    <body>
                        <div id=""123"" style='border:1px solid red;'>
                            <p class=""mb20"">исходный текст</p>
                        </div>
                    </body>
                </html>";
                Action<HtmlDocument> update = doc =>
                    {
                        var div = doc.GetElementById("123");
                        if(div == null) return;
                        var p = div.FirstChild;
                        div.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterEnd, p);
                        p.SetAttribute("className", "x1");
                        ((dynamic)div.Parent.DomElement).removeChild(div.DomElement);
                    };
                var wb = new WebBrowser { Parent = this, Dock = DockStyle.Fill, DocumentText = html };
                this.Menu = new MainMenu();
                this.Menu.MenuItems.Add("Test1", (s, e) => 
                    {
                        wb.DocumentText = html;
                        while(wb.ReadyState != WebBrowserReadyState.Complete)
                            Application.DoEvents();
                        update(wb.Document);
                    });
                this.Menu.MenuItems.Add("Test2", delegate 
                {
                    new WebBrowser { DocumentText = html }
                        .DocumentCompleted += (s, e) =>
                        {
                            var b = s as WebBrowser;
                            update(b.Document);
                            wb.DocumentText = b.Document.Body.Parent.OuterHtml;
                        };
                });
                this.Menu.MenuItems.Add("Reset html", (s, e) => wb.DocumentText = html);
            }
        }
    }
    
     

    • Предложено в качестве ответа Malobukv 20 декабря 2011 г. 5:18
    • Помечено в качестве ответа Abolmasov Dmitry 27 декабря 2011 г. 13:07
    18 декабря 2011 г. 19:01
  • Можете пояснить принцип работы вашего кода?
    19 декабря 2011 г. 7:15
  • > Можете пояснить принцип работы вашего кода?
     
     
    html загружается в WebBrowser. с помощью методов HTML DOM тег P перемещается за пределы тега DIV. затем тег DIV удаляется. а у тега P меняем значение атрибута class.
    подробности можно увидеть в отладчике. поставьте брейкпоинт в метод update на строке
    var div = doc.GetElementById("123");
    
     
     
    19 декабря 2011 г. 8:12