получить внутренний текст HTML-узла? - PullRequest
0 голосов
/ 02 ноября 2011

Я пытаюсь разобрать html-страницу, и я столкнулся с проблемой, которая заключается в том, что я хочу получить внутренний текст сегментированного узла, т.е. выполнить итерации для дочерних html-узлов, принимая каждый текстовый сегмент как дочерний:

<node1>
This text I WANT on iterate#1
<innernode>This text I WANT on iterate#2</innernode>
This text I WANT on iterate#3
<innernode>This text I WANT on iterate#4</innernode>
This text I WANT on iterate#5
</node1>  

Я использую htmlagilitypack в качестве парсера, но я думаю, что я столкнусь с этой проблемой с любым другим html-парсером

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

В зависимости от версии .NET вы можете использовать метод расширения, который работает на нужном узле.Я не использовал пакет гибкости html, так что это смесь C # и псевдо-кода.

например,

public static List<string> GetTextSegments(this HtmlNode node)
{
    string nodesText = ... // get the nodes text
    yield nodesText;

    List<HtmlNode> innerNodes = ... // get the list of inner nodes with a 
    // query like node.SelectNodes("//innerNodes")
    foreach(HtmlNode iNode in innerNodes)
    {
        string iNodeText = ... // get iNodes text
        yield iNodeText;
    }
}

Затем вы можете назвать это так:

HtmlNode nodeOfTypeNode1 = ... // 
foreach(string text : nodeOfTypeNode1.getTextSegments())
{
    Console.WriteLine(text);
}
1 голос
/ 02 ноября 2011

Чтобы получить цель, используйте SelectNodes с XPath.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(content);//content is the variable containing your html.
var items = doc.DocumentNode.SelectNodes("/node1//text()");
foreach (var item in items)
{
    Console.WriteLine(item.OuterHtml.Replace("\r\n",""));
}
...