2

コンテクスト:

このサービスでクエリの結果を解析していますが、結果を含むHTMLが混乱しています。

私の目標は、このクエリの結果として表示される各「属性と値」を使用して「KeyValue」ペアを作成することです。

現時点では、それを解決するための1つの方法しか思い浮かびませんでした。

解析のロジック:

  1. すべての属性ノードを選択します
  2. すべての値ノードを選択します
  3. キーと値のペアを構築するために構築された各コレクションの「インデックス」を一致させます

例:Attribute [0] with Value [0]->(このサービスでは、「CNPJ」と「12.272.084 / 0001-00」になります)。

問題:

すべての属性ノードをフェッチするXPath式を見つけることができました。

attrNodes = htmlDoc.DocumentNode.SelectNodes ("//td[@bgcolor='#f1f1b1']/*/font[@face='Verdana']");

Htmlでレンダリングしたときに実際には同じように見えるノードの種類が異なるため(たとえば、「b」と「strong」)、値ノード用のノードも見つけることができませんでした。

階層が異なるノードでさえ、XPathでワイルドカード( "*")を使用して解決することができませんでした(たとえば、単一のタグまたは2つのタグがネストされています)

私の目標:

  1. XPathを記述して、値を持つノードの異なるサブセットに到達します
  2. すべてのノードを単一のコレクションに配置します
  3. Html内の各ノードの位置に基づいて、このコレクションのノードを並べ替えます(HTMLで最初に表示されるノードは、リストの先頭になります)

どうすれば目標を達成できますか?

HTMLサンプル:

こちらで確認できます

または、CNPJテキストボックスに「 : 12272084000100 」と入力し、[Pesquisar]をクリックして、サービスを自分で照会します。その後、「CompanhiaEletricadeAlagoas」というテキストをクリックするだけです。

前もって感謝します

4

1 に答える 1

4

HtmlAgilityPackフレームワークの「HtmlNode」クラスにある属性を見つけて、問題を解決しました。

HtmlNodeクラスに関するこのドキュメントによると:

StreamPosition
Gets the stream position of this node in the document, relative to the start of the document. 

これは、このまったく同じ Html ページ (テスト目的で使用されるテーブル) にあるテーブルのリストを使用したテストの出力です。

// HtmlNodeCollection of Tables
tableNodes[0].StreamPosition
925
tableNodes[1].StreamPosition
1651
tableNodes[2].StreamPosition
2387

この StreamPosition をパラメーターとして使用してリストを注文すると、問題が解決しました。

List<HtmlNode> OrderedList = valueNodes.OrderBy ( node => node.StreamPosition ).ToList<HtmlNode>();
于 2012-11-19T14:15:15.737 に答える