Как проверить, содержит ли элемент HTML текстовое содержимое

В приложении winform на С# я пытаюсь проверить, является ли innerText из HtmlElement пробелом или нет.

 String.IsNullOrWhiteSpace(elem.InnerText)

elem.OuterHtml это:

<div class="ad-container toplb">
 <span class="leader-board">
 <div id="div-gpt-ad-1409955032897-3">
 <script type="text/javascript">
  PbhAdUnit.cmd_push(function() {pbh_ad_units['div-gpt-ad-1409955032897-3'].display(); });
 </script>
 </div>
 </span>
</div

Содержание innerText

  PbhAdUnit.cmd_push(function() {pbh_ad_units['div-gpt-ad-1409955032897-3'].display(); });  

Я ожидаю, что innerText будет игнорировать сценарии и возвращать пустое значение, если внутри элемента нет читаемого текста (текста, отображаемого на странице). В любом случае, как я могу игнорировать такие элементы?


person Ahmad    schedule 25.12.2015    source источник
comment
Что такое читабельный текст?   -  person Hamid Pourjam    schedule 25.12.2015
comment
@dotctor текст, который появляется на странице.   -  person Ahmad    schedule 25.12.2015
comment
И на какой элемент указывает ваш elem?   -  person Hamid Pourjam    schedule 25.12.2015
comment
@dotctor — верхний элемент div, код — его externalhtml   -  person Ahmad    schedule 25.12.2015
comment
Вы пробовали string.IsNullOrWhiteSpace?   -  person Ian    schedule 25.12.2015
comment
@Ian да, но, как вы видите, внутренний текст не пуст   -  person Ahmad    schedule 25.12.2015
comment
Когда я тестирую с помощью <div id="div1"><script type="text/javascript">alert('');</script><input type="Text"/>Some Text</div>, внутренний текст для div1 равен Some Text.   -  person Reza Aghaei    schedule 25.12.2015
comment
@RezaAghaei да, и я хочу обнаруживать и игнорировать такие элементы, которые не содержат контента   -  person Ahmad    schedule 25.12.2015
comment
Понятно, поэтому скрипты усложняют вашу работу... Не уверен, что регулярное выражение с обнаружением ;$</script> в конце строки может помочь. Но, возможно, стоит попробовать. И с Рождеством кстати!   -  person Ian    schedule 25.12.2015
comment
В моем примере он возвращает Some Text в качестве внутреннего текста и, кажется, игнорирует их. Как получить внутренний текст?   -  person Reza Aghaei    schedule 25.12.2015
comment
@RezaAghei Правда! вы можете проверить данный html в вопросе, что для него возвращается   -  person Ahmad    schedule 25.12.2015
comment
Содержимое <div class="ad-container toplb"> — пустая строка.   -  person Reza Aghaei    schedule 25.12.2015
comment
как проверить внутренний текст?   -  person Reza Aghaei    schedule 25.12.2015
comment
@RezaAghaei использует elem.InnerText, это странно, в моем случае оно не было пустым, как показывает окно Watch в отладке, я скопировал их оба из окна Watch   -  person Ahmad    schedule 25.12.2015


Ответы (1)


Вы можете найти внутренний текст элемента, используя InnerText. Он возвращает весь внутренний текст, удаляя разметку.

Пример кода:

private void Form1_Load(object sender, EventArgs e)
{
    this.webBrowser1.Navigate(@"d:\sample.html");
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var div = this.webBrowser1.Document.GetElementById("div1");
    MessageBox.Show(string.Format("'{0}'", div.InnerText), "InnerText");
    MessageBox.Show(string.Format("'{0}'", div.InnerHtml), "InnerHtml");
}

Пример содержания:

Создайте файл sample.html, используя содержимое ниже.

<html>
<head><title>Title</title></head>
<body>
    <div id="div1"><script type="text/javascript">alert('Hi');</script><input type="text"/></div>
</body>
</html>

Результат:

Я поставил '' вокруг внутреннего текста и внутреннего html:

введите здесь описание изображения

введите здесь описание изображения

person Reza Aghaei    schedule 25.12.2015
comment
Спасибо, в любом случае у меня нет этой проблемы сейчас, когда я удаляю теги скрипта, используя ответ на этот вопрос stackoverflow.com/questions/13441470/, но я ожидал, что вы попробуете мой оригинальный html. - person Ahmad; 25.12.2015
comment
Я также пытался использовать ваш оригинальный html, и результат тот же. Но чтобы ответ был более общим и полезным для будущих читателей, я использовал приведенные выше значения для ответа. Вы можете просто поместить желаемый контент в этот образец и увидеть результат :) - person Reza Aghaei; 25.12.2015
comment
Спасибо, я должен отладить это снова. На самом деле моя проблема была с самим InnerText. Я уведомлю вас. - person Ahmad; 26.12.2015