0

Web ページの特定の部分を抽出しようとしていますが、問題が発生しています。私は Web 解析に非常に慣れていないので、何も知らないと仮定して、回答を非常に詳細にしてください。

私はhtmlのこのセクションを持っています

<div id="playerStats">
  <div id="hp"><span class="title">HP:</span>"12213"</div>
  <div id="mp"><span class="title">MP:</span></div>
  <div id="magicResist"><span class="title">Magic Resist</span>"4618"</div>
  <div id="physicalDefend"><span class="title">Physical Defence</span>"1725"</div>
  <div id="phyCriticalReduceRate"><span class="title">Strike Resist</span>"1518"</div>
  <div id="phyCriticalDamageReduce"><span class="title">Strike fortitude</span>"392"</div>
  <div id="physicalRight"><span class="title">Main Hand Attack</span>"201"</div>
  <div id="accuracyRight"><span class="title">Main Hand Accuracy</span>"201"</div>
  <div id="criticalRight"><span class="title">Main Hand Critical</span>"201"</div>
  <div id="physicalLeft"><span class="title">Off Hand Attack</span>"201"</div>
  <div id="accuracyLeft"><span class="title">Off Hand Accuracy</span>"201"</div>
  <div id="criticalLeft"><span class="title">Off Hand Critical</span>"201"</div>
  <div id="attackSpeed"><span class="title">Attack Speed</span>"201"</div>
  <div id="magicalBoost"><span class="title">Magic Boost</span>"201"</div>
  <div id="magicalAccuracy"><span class="title">Magic Accuracy</span>"201"</div>
  <div id="magicalCriticalRight"><span class="title">Crit Spell</span>"201"</div>
  <div id="castingTimeRatio"><span class="title">Casting Speed</span>"201"</div>
  <div id="block"><span class="title">Block</span>"201"</div>
  <div id="dodge"><span class="title">Evasion</span>"201"</div>
</div>

次の出力が得られます

HP:
MP:
Magic Resist
Physical Defence
Strike Resist
Strike fortitude
Main Hand Attack
Main Hand Accuracy
Main Hand Critical
Off Hand Attack
Off Hand Accuracy
Off Hand Critical
Attack Speed
Magic Boost
Magic Accuracy
Crit Spell
Casting Speed
Block
Evasion
Movement Speed

コードを使用して

var browser = document.DocumentNode.SelectNodes("//*[@id=\"playerStats\"]");
if (browser != null) {
  foreach(var b in browser)
  output.AppendLine(b.InnerHtml);
} else {
  output.AppendLine(("Oops!  I'm broken!"));
}

ただし、数字「12213」またはその間のテキストも含めたいと思います

</span>"xxx"</div> 

「HP:」と言ってから

既に実装したコードを使用して、このテキストを取得するにはどうすればよいですか?

4

1 に答える 1

0

次のようにできます (コンソール アプリのサンプル)。

HtmlDocument doc = new HtmlDocument();
doc.Load(MyTestFile);

foreach(var node in doc.DocumentNode.SelectNodes("//div[@id='playerStats']/div/span"))
{
    Console.WriteLine(node.InnerText + " " + (node.NextSibling != null ? node.NextSibling.InnerText : null));
}

NextSibling は、同じ親を持つ特定のノードの次のノードです。現在のノードが親の最後の子である場合、存在しない可能性があります。

パフォーマンスの点で優れているため、最初の選択で要素タイプを DIV に明示的に設定したことに注意してください。(* 任意のノードに一致)。

于 2013-05-05T06:07:32.267 に答える