2011-11-01 7 views
0

は、私は、HTMLページを解析しようとしていると私は私が子供のように各テキストセグメントを想定した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パーサーでこの問題に直面すると思います。

+0

標準の.NET XMLクラスを使用しない理由は? – Zhanger

答えて

1

.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

目的を達成するには、XPathでSelectNodesを使用してください。

+0

しかし、私がこのように使用すると、htmlノードを扱うことができません。ノードやその属性やその子孫の名前を取得できません。 –

+0

あなたがしたいことは、内部テキストとノードに関係なくすべてのテキストを取得することです場合。もしそうなら、 'DocumentNode.SelectNodes(" // text() ")'? –

関連する問題