Objective-Cのhppleは特定のオブジェクトを見つけることができません(xml/htmlパーサー)
-
09-10-2019 - |
質問
hppleを試したことがない退役軍人にとっては、それは素晴らしいことです。 XPathを使用して、HTML/XMLドキュメントを検索します。それは仕事を終わらせ、私のような初心者が理解するのは簡単です。しかし、私は問題を抱えています。
私はこのhtmlの塊を持っています:
<ul class="challengesList dailyChallengesList">
<li>
<div class="corner topLeft"></div>
<img id="ctl00_mainContent_dailyChallengesRepeater_ctl00_challengeImage" title="Gunslinger" src="/images/reachstats/challenges/0.png" alt="Gunslinger" style="border-width:0px;">
<div class="info">
<div class="rFloat">
<p id="ctl00_mainContent_dailyChallengesRepeater_ctl00_challengeExpiration" class="timeDisplay dailyExpirationCountdown"><span>0d</span><span>19h</span><span>9m</span><span class="seconds">37s</span></p>
<p>1500cR</p>
</div>
<h5>Gunslinger</h5>
<p class="description">Kill 150 enemies in multiplayer Matchmaking.</p>
<div class="reward">
<div id="ctl00_mainContent_dailyChallengesRepeater_ctl00_progressBox" class="barContainer">
<div id="ctl00_mainContent_dailyChallengesRepeater_ctl00_progressBar" class="bar" style="width:21%;"><span></span></div>
<p>31/150</p>
</div>
</div>
</div>
<div class="clear"></div>
</li>
<li>
<div class="corner topLeft"></div>
<img id="ctl00_mainContent_dailyChallengesRepeater_ctl01_challengeImage" title="A Great Friend" src="/images/reachstats/challenges/0.png" alt="A Great Friend" style="border-width:0px;">
<div class="info">
<div class="rFloat">
<p id="ctl00_mainContent_dailyChallengesRepeater_ctl01_challengeExpiration" class="timeDisplay dailyExpirationCountdown"><span>0d</span><span>19h</span><span>9m</span><span class="seconds">37s</span></p>
<p>1400cR</p>
</div>
<h5>A Great Friend</h5>
<p class="description">Earn 15 assists today in multiplayer Matchmaking.</p>
<div class="reward">
<div id="ctl00_mainContent_dailyChallengesRepeater_ctl01_progressBox" class="barContainer">
<div id="ctl00_mainContent_dailyChallengesRepeater_ctl01_progressBar" class="bar" style="width:40%;"><span></span></div>
<p>6/15</p>
</div>
</div>
</div>
<div class="clear"></div>
</li>
<li>
<div class="corner topLeft"></div>
<img id="ctl00_mainContent_dailyChallengesRepeater_ctl02_challengeImage" title="Cannon Fodder" src="/images/reachstats/challenges/2.png" alt="Cannon Fodder" style="border-width:0px;">
<div class="info">
<div class="rFloat">
<p id="ctl00_mainContent_dailyChallengesRepeater_ctl02_challengeExpiration" class="timeDisplay dailyExpirationCountdown"><span>0d</span><span>19h</span><span>9m</span><span class="seconds">37s</span></p>
<p>1000cR</p>
</div>
<h5>Cannon Fodder</h5>
<p class="description">Kill 50 infantry-class foes in the Campaign today.</p>
<div class="reward">
<div id="ctl00_mainContent_dailyChallengesRepeater_ctl02_progressBox" class="barContainer">
<div id="ctl00_mainContent_dailyChallengesRepeater_ctl02_progressBar" class="bar" style="width:0%;"><span></span></div>
<p>0/50</p>
</div>
</div>
</div>
<div class="clear"></div>
</li>
<li>
<div class="corner topLeft"></div>
<img id="ctl00_mainContent_dailyChallengesRepeater_ctl03_challengeImage" title="Heroic Demon" src="/images/reachstats/challenges/3.png" alt="Heroic Demon" style="border-width:0px;">
<div class="info">
<div class="rFloat">
<p id="ctl00_mainContent_dailyChallengesRepeater_ctl03_challengeExpiration" class="timeDisplay dailyExpirationCountdown"><span>0d</span><span>19h</span><span>9m</span><span class="seconds">37s</span></p>
<p>1500cR</p>
</div>
<h5>Heroic Demon</h5>
<p class="description">Kill 30 Elites in Firefight Matchmaking on Heroic or harder.</p>
<div class="reward">
<div id="ctl00_mainContent_dailyChallengesRepeater_ctl03_progressBox" class="barContainer">
<div id="ctl00_mainContent_dailyChallengesRepeater_ctl03_progressBar" class="bar" style="width:0%;"><span></span></div>
<p>0/30</p>
</div>
</div>
</div>
<div class="clear"></div>
</li>
</ul>
ナッツの部分は、私はhppleを「見る」ことができないということです <div class="reward">
. 。私はそれを見つけるために以下を使用しています:
NSArray * rawProgress = [doc search:@"//ul[@class='challengesList']
/li/div[@class='info']
/div[@class='reward']/p"];
これは常に空の配列を返します。このプロジェクトの他のすべての要素で同じようなものが機能していたので、それは私を夢中にさせています...
どんな助けも感謝します:)
編集
これは機能します:
NSArray * rawDescriptions = [doc search:@"//ul[@class='challengesList']
/li/div[@class='info']
/p[@class='description']"];
これはそうではありません:
NSArray * rawProgress = [doc search:@"//ul[@class='challengesList']
/li/div[@class='info']
/div[@class='reward']
/div[@id]//p"];
さらに、rfloatまたは報酬の子ノードをリストしようとすると、クラッシュが生成されます:(
解決
あなたの「P」要素は、div class = "reward"の直接の子ではありません。
提供したXMLを使用して、XPath Expression
div[@class='info']/div[@class='reward']//p
動作します。
他のヒント
- 見る これはとても質問です hppleとaの問題に関する同様のレポートの場合 代替案のリスト。
あなたはバグを見ているかもしれません。によると このページ,
開発者によって実験プロジェクトとして分類されていますが、これまでのところ「私のために働いています」
更新:今はちょっと壊れているようです。誰かがより良い解決策を手に入れましたか?
あなたはしたいかもしれません バグレポートを入力してください, 、そしてプロジェクトがまだ維持されている場合、開発者は修正またはソリューションで応答するかもしれません。または、コメントを残すことができます HPPLEを推奨するこのページ, 、そして、そのブロガーまたは彼の読者の一人が問題に対処することができるかどうか、またはhppleがまったくアクティブであるかどうかを伝えることができるかどうかを確認します。
見つけることができるかどうかも確認できます ハイパーパーサー. 。 「これは、nsxmlparserと同様のAPIを備えたシンプルなHTMLパーサーです。半valid HTMLを解析するために特別に設計されています。」しかし、それがかつてあったリンクにはそこにないようです。