2011-02-02 5 views
0

Пусть говорят, что мы имеем такую ​​переменную строку:Как инкапсулировать текст в теги?

string input = "First regular, <b>bold</b>,<i>italic</i>,<u>underline</u>,<b><i><u>bold+italic+underline</u></i></b>" 
  • строку, которая может содержать некоторые HTML-теги в нем.

Вопрос заключается в том, как я могу encapsule каждый «без TAged» часть текста в какой-то тег, чтобы получить л так:

string output = "<plain>First regular, </plain><b>bold</b><plain>,</plain><i>italic</i><plain>,</plain><u>underline</u><plain>,</plain><b><i><u>bold+italic+underline</u></i></b>" 

Как это сделать в C#? Regex? Как должно выглядеть такое выражение регулярных выражений?

Может инкапсуляция не хорошее начало, то, что мне нужно, чтобы создать структуру XML из:

string input = "First regular, <b>bold</b>,<i>italic</i>,<u>underline</u>,<b><i><u>bold+italic+underline</u></i></b>" 

Мне нужно создать

XDocument xml = XDocument.Parse("<plain>First regular, </plain><b>bold</b><plain>,</plain><i>italic</i><plain>,</plain><u>underline</u><plain>,</plain><b><i><u>bold+italic+underline</u></i></b>")

+0

вопрос вы не понят .. и как вы планируете размещать не помеченный контент в ЛЮБОЙ тег. Ваши оба примера текста одинаковы. Какой тег вы говорите о .. Это он HTML –

+0

Нам нужна дополнительная информация. Итак, первая реакция заключается в том, что вы не можете анализировать xml с регулярным выражением, но если вы работаете с подмножеством xml, то, может быть, возможно, мы сможем что-то сделать. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – DonkeyMaster

+1

Если вам нужна вложенность, я бы не рекомендовал регулярное выражение, хотя реализация .NET может обрабатывайте это. – leppie

ответ

0

Этот код вида потерпеть неудачу, но он должен вывести вас по правильному пути:

string input = "First regular, <b>bold</b>,<i>italic</i>,<u>underline</u>,<b><i><u>bold+italic+underline</u></i></b>"; 
input = "<data>" + input + "</data>"; 
XmlDocument xml = new XmlDocument(); 
xml.InnerXml = input; 
XmlNodeList nodes = xml.SelectNodes("//text()"); 
foreach (XmlNode node in nodes) { 
    if (node.ParentNode.Name != "b" && node.ParentNode.Name != "i" && node.ParentNode.Name != "u") { 
     node.InnerText = "^^^^^" + node.InnerText + "$$$$$"; 
    } 
} 
input = xml.DocumentElement.InnerXml.Replace("^^^^^", "<plain>").Replace("$$$$$", "</plain>"); 
Смежные вопросы