Замените пустой тег span на тег br с помощью Regex - PullRequest
0 голосов
/ 31 января 2011

Может ли кто-нибудь сказать мне шаблон Regex, который проверяет наличие пустых тегов span и заменяет их тегом.

Что-то вроде следующего:

string io = Regex.Replace(res,"" , RegexOptions.IgnoreCase);

Я не знаю, какой шаблонбыть переданным в!

Ответы [ 4 ]

2 голосов
/ 15 ноября 2012

Код Джеффа Меркадо имеет ошибку в строках:

.Where(e => e.Name.Equals("span", StringComparison.OrdinalIgnoreCase) && n.Name.Equals("span", StringComparison.OrdinalIgnoreCase)

Сообщение об ошибке: Member 'object.Equals(object, object)' cannot be accessed with an instance reference; qualify it with a type name instead

Они не работали, когда я пытался заменить другими объектами!

2 голосов
/ 31 января 2011

Этот шаблон найдет все пустые теги span, такие как <span/> и <span></span>:

<span\s*/>|<span>\s*</span>

Так что этот код должен заменить все ваши пустые теги span тегами br:

string io = Regex.Replace(res, @"<span\s*/>|<span>\s*</span>", "<br/>");
0 голосов
/ 31 января 2011

Вы должны разобрать его, отыскивая пустые элементы span и заменяя их. Вот как вы можете сделать это, используя LINQ to XML. Просто обратите внимание, что в зависимости от фактического HTML может потребоваться настройка, чтобы заставить его работать, поскольку он является синтаксическим анализатором XML, а не HTML.

// parse it
var doc = XElement.Parse(theHtml);

// find the target elements
var targets = doc.DescendantNodes()
                 .OfType<XElement>()
                 .Where(e => e.Name.Equals("span", StringComparison.OrdinalIgnoreCase)
                          && e.IsEmpty
                          && !e.HasAttributes)
                 .ToList(); // need a copy since the contents will change

// replace them all
foreach (var span in targets)
    span.ReplaceWith(new XElement("br"));

// get back the html string
theHtml = doc.ToString();

В противном случае, вот некоторый код, показывающий, как вы можете использовать HTML Agility Pack для того же (написано так, что отражает другую версию).

// parse it
var doc = new HtmlDocument();
doc.LoadHtml(theHtml);

// find the target elements
var targets = doc.DocumentNode
                 .DescendantNodes()
                 .Where(n => n.NodeType == HtmlNodeType.Element
                          && n.Name.Equals("span", StringComparison.OrdinalIgnoreCase)
                          && !n.HasChildNodes && !n.HasAttributes)
                 .ToList(); // need a copy since the contents will change

// replace them all
foreach (var span in targets)
{
    var br = HtmlNode.CreateNode("<br />");
    span.ParentNode.ReplaceChild(br, span);
}

// get back the html string
using (StringWriter writer = new StringWriter())
{
    doc.Save(writer);
    theHtml = writer.ToString();
}
0 голосов
/ 31 января 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...