Member 9665875 Ответов: 2

Как прочитать дочерний элемент" strong " пролета? С#


Привет Ребята,

Я пытаюсь прочитать дочерний элемент" сильный " пролета. Я хочу затем преобразовать его в строку.

поэтому в данном случае я пытаюсь прочитать "сильное" значение, которое является числом 4.

У кого-нибудь есть идеи, как я могу этого добиться, пожалуйста.

Вот копия HTML-страницы для справки.

Показывает: наиболее удивительных изображений в Интернете[^]

Заранее спасибо

Что я уже пробовал:

Я уже пробовал искать на различных форумах, включая этот, но безуспешно.

Код у меня есть до сих пор

            HtmlElementCollection allelements = _webBrowser.Document.All;

            foreach (HtmlElement webpageelement in allelements)
            {
                if ((webpageelement.GetAttribute("span") == "4"))
                {
                    MessageBox.Show(“Show”);
                }
}



с тех пор как я узнал из того, что было сказано до сих пор в этой теме, у меня есть это.

HtmlElementCollection theElementCollection = default(HtmlElementCollection);
theElementCollection = webBrowser1.Document.GetElementsByTagName("div");
foreach (HtmlElement curElement in theElementCollection)
{
    if (curElement.GetAttribute("className").ToString() == "ng-scope")
    {
        HtmlElementCollection childDivs = curElement.Children.GetElementsByName("strong");
        foreach (HtmlElement childElement in childDivs)
        {
            MessageBox.Show(childElement.InnerText);
        }

    }
}

[no name]

"пробовал смотреть на различных форумах, включая этот, и не повезло", вам может повезти больше, если вы попытаетесь на самом деле написать какой-то код.

Member 9665875

у меня есть спасибо, я просто не включил его

[no name]

Вы также не смогли описать проблему.

F-ES Sitecore

Ваш код проходит через все элементы и находит один с атрибутом span равным 4, поэтому вы ищете что-то вроде

& lt;blah span= "4">

Это совсем не похоже на ваш пример html. Вместо того чтобы проходить через все элементы, используйте GetElementsByTagName, чтобы получить все элементы "span", а затем для каждого промежутка посмотрите на дочерние элементы, чтобы увидеть, есть ли дочерний элемент с тегом "strong" , и если да, то получите внутренний текст этого элемента

https://msdn.microsoft.com/en-us/library/system.windows.forms.htmlelement.children(v=против 110). aspx

Member 9665875

Спасибо за Ваш быстрый ответ, не могли бы вы помочь мне дальше, пожалуйста, у меня есть это в настоящее время, где я иду не так, пожалуйста?

HtmlElementCollection theElementCollection = по умолчанию(HtmlElementCollection);
theElementCollection = метода webbrowser1.Документ.GetElementsByTagName ("div");
по каждому элементу (curElement объекта HTMLElement в theElementCollection)
{
если (вылечить).GetAttribute ("имя класса").ToString() == "ng-scope")
{
HtmlElementCollection childDivs = curElement.Дети.GetElementsByName ("сильный");
по каждому элементу (childElement объекта HTMLElement в childDivs)
{
Ящик для сообщений.Показать (childElement.Через свойство innerText);
}

}
}

Robert Welliever

Почему это не работает? Разве вы просто не проверяете, имеет ли childElement внутренний текст, равный 4? Так что замените:
Ящик для сообщений.Показать (childElement.Через свойство innerText)
с:
if (childElement.InnerText = = "4") {//сделай что-нибудь }.

Или вы могли бы просто заменить:
если (вылечить).GetAttribute ("имя класса").ToString() == "ng-scope") { ... }
с:
если (вылечить).GetAttribute ("имя класса").ToString() == "ng-scope" & & amp; curElement.Возвращение null.InnerText == "4") {//сделай что-нибудь }
что будет работать, если промежуток внутри элемента "ng-scope" инвариантен.

F-ES Sitecore

Проверьте мое опубликованное решение

2 Ответов

Рейтинг:
0

F-ES Sitecore

HtmlElementCollection theElementCollection = default(HtmlElementCollection);
// you need a list of the "span" elements, not "div"
theElementCollection = _webBrowser.Document.GetElementsByTagName("span");
foreach (HtmlElement curElement in theElementCollection)
{
    if (curElement.GetAttribute("className").ToString() == "ng-scope")
    {
        // there isn't a GetElementsByTagName (GetElementsByName is something else) on the child element so we'll
        // iterate through all children....
        HtmlElementCollection childDivs = curElement.Children;
        foreach (HtmlElement childElement in childDivs)
        {
            // ..and check the TagName for "strong"
            if (string.Compare(childElement.TagName, "strong", true) == 0)
            {
                MessageBox.Show(childElement.InnerText);
            }
        }

    }
}


Maciej Los

Отлично, 5!