JSOUP sélectionnez <div> avec l'ID de
Je suis en train de faire une petite application Android pour une classe, où je trouve que le cancer liés à des événements de l'American Cancer Society du site web. J'ai été en utilisant JSoup obtenir des informations de base sur les événements, et d'obtenir des informations spécifiques à partir du site web, j'ai essayé d'utiliser la méthode select (). Cependant, la méthode actuelle que je suis à l'aide de grappins de façon plus HTML de nœuds que je voudrais et je ne pouvais pas comprendre pourquoi. Le tableau que je suis en train de saisir ressemble à ceci:
EDIT: j'ai réalisé que le where id = "pnlResults" ne s'arrête pas à la table, elle se termine après environ 3 tables, tous avec l'information que je tiens à saisir. Voici de nouveau la table
<div id="pnlResults">
<h2><span id="lblEventName">American Cancer Society 44th Annual Walter Hagen Golf Tournament</span></h2>
<!-- General Information Box -->
<div class="text-box boxed wide">
<h3 class="head" style="width:97%;">
General Information
</h3>
<div class="content">
<p>
<label>Event Times:</label><span id="lblStartDate">Monday, July 30, 2012</span><span id="lblEndDate"></span><br />
<label> </label><span id="lblStartTime">10:00 AM</span> - <span id="lblEndTime">9:00 PM</span>
</p>
<p>
<label>Time Zone:</label><span id="lblTimeZone">Eastern</span>
</p>
<p>
<label>Description:</label><span id="lblDesc" class="fieldData long">The American Cancer Society Walter Hagen Golf Tournament highlights the Society’s role in supporting research and patient care here in Rochester. Funds raised through this event help us make a difference in patents’ lives every day though programs including Road to Recovery and Patient Navigation as well as support grants to our research institutions. 144 golfers will play a round of golf and then enjoy cocktails, dinner, and silent auction following the tournament. </span>
</p>
<p>
<label>Agenda:</label><span id="lblAgenda" class="fieldData long">10:00am - Check-in, 11:00am - Lunch, 12:15pm - Shot gun start, 6:00 - Cocktails and silent auction, 7:00pm Dinner and program</span>
</p>
</div>
</div>
<div id="pnlStandardDisplay">
<!-- Event Location Box -->
<div class="text-box boxed wide line">
<h3 class="head" style="width:97%;">
Event Location
</h3>
<div class="content" style="display:inline-block; width:97%;">
<div >
<div id="mapOutsideContainer" class="resource-map">
<div id="map_canvas" class="resource-map" ></div>
</div>
<script type="text/javascript">
var mapDataPoints = [{ "lat":43.1075545,"lng":-77.5164518, "title":"Golf Event","content":"<b>American Cancer Society 44th Annual Walter Hagen Golf Tournament<\/b><br/><\/br>4045 East Avenue<br /><br/>Rochester, New York 14618<br /><br />Phone: <br />Fax: "} ];
buildMap(mapDataPoints, -5);
</script>
</div>
<h4><span id="lblLocationName">Irondequoit Country Club</span></h4>
<p>
<label>Address:</label><span id="lblAddress" class="fieldData" style="width:150px;">4045 East Avenue<br />Rochester, New York 14618</span>
</p>
<p>
<label nowrap="nowrap">Handicap Accessible:</label><span id="lblHandicapAccesible">Yes</span>
</p>
</div>
</div>
<!-- Primary Contact Box -->
<div class ="line" >
<div id="eventPrimaryContact_divContact" class="text-box boxed wide">
<h3 class="head" style="width:97%;">
Primary Contact
</h3>
<div class="content">
<p>
<label>Contact:</label><span id="eventPrimaryContact_lblContact">Katerina Kormas (<a href="mailto:[email protected]?subject=American Cancer Society 44th Annual Walter Hagen Golf Tournament">Contact ACS for Details</a>)</span>
</p>
<p>
<label>Contact Type:</label><span id="eventPrimaryContact_lblContactType">ACS Staff</span>
</p>
<p>
<label>Phone:</label><span id="eventPrimaryContact_lblContactPhone">(585) 288-1950</span>
</p>
<p>
<label>Additional Information:</label><span id="eventPrimaryContact_lblContactAddlInfo" class="fieldData long">Direct line is 585-224-4919 or cell 585-645-8912</span>
</p>
</div>
</div>
</div>
<!-- Registration Information Box -->
<div class="text-box boxed wide line">
<h3 class="head" style="width:97%;">
Registration Information
</h3>
<div class="content">
<p>
<label nowrap="nowrap">Registration Required?: </label><span id="lblRegRequired">Yes</span>
</p>
</div>
</div>
<!-- Event Cost Box -->
<div class ="line" >
<div id="eventCost_divCost" class="text-box boxed wide">
<h3 class="head" style="width:97%;">
Event Cost
</h3>
<div class="content">
<p>
<label>Cost/Registration Fee: </label><span id="eventCost_lblCostRegFee" class="fieldData long">$350 per golfer</span>
</p>
<p>
<label>Payment Type: </label><span id="eventCost_lblPaymentTypes" class="fieldData">Cash, Check, American Express, Mastercard, Visa, Discover</span>
</p>
<p>
<label>Check Payable To: </label><span id="eventCost_lblCheckPayable" class="fieldData">American Cancer Society</span>
</p>
<p>
<label>Memo Line: </label><span id="eventCost_lblCheckMemo" class="fieldData">American Cancer Society 44th Annual Walter Hagen Golf Tourna</span>
</p>
<p>
<label>Mail Check To:</label><span id="eventCost_lblCheckMailTo" class="fieldData">American Cancer Society<br />1120 South Goodman St<br />Rochester, New York 14620</span>
</p>
</div>
</div>
</div>
<!-- Tax Deduction Information Box -->
<div class="line">
<div class="text-box boxed wide">
<h3 class="head" style="width:97%;">
Tax Deduction Information
</h3>
<div class="content">
<p>
$210 per golfer is tax deductible
</p>
</div>
</div>
</div>
</div> <!-- end standard display -->
<!-- end daffodil display -->
EDIT: au vu de ces nouvelles tables, j'aimerais extraire les Informations Générales, et le lieu de l'Événement. Comment pourrais-je aller sur le faire? Peut-être en utilisant le sous-ensemble de sélectionner, je viens de sélectionner à nouveau, Lorsque les en-têtes sont ce que je veux?
Le code où je suis en utilisant le select() est illustré ci-dessous. Comme je l'ai dit avant, j'ai essayé d'utiliser
select("div[id=pnlResults]);
mais le retour de données est beaucoup plus que juste la div où l'id est pnlResults.
public ArrayList<Event> results()
{
ArrayList<Event> results = new ArrayList<Event>();
Document doc = Jsoup.parse(page);
Elements links = doc.select("a[href*=event-details]");
for(Element e: links)
{
String title = e.text();
String link = "http://www.cancer.org/involved/participate/app/"+e.attr("href");
try{
Document eventInfo = Jsoup.connect(link).get();
Elements info = eventInfo.select("div[id*=pnlResults");
}
catch(MalformedURLException exception)
{
exception.printStackTrace();
}
catch(IOException exception)
{
exception.printStackTrace();
}
}
return results;
}
Toute aide serait grandement appréciée.
Vous devez vous connecter pour publier un commentaire.
Essayer:
Mise à jour de mise à jour:
Maintenant que vous avez plus de données, et depuis le HTML lui-même n'est pas grande, vous aurez juste à travailler à travers elle de choisir vos données. Si le contenu vous avez besoin de tous ont
id
valeurs puis utilisez leid
attribut de ces éléments pour obtenir le texte.Si vous voulez obtenir le contenu de la div avec l'id "pnlResults", JSoup fournir la méthode de getElementById.
Par exemple, si vous voulez obtenir ce contenu et de le mettre dans la chaîne, vous pouvez le faire comme ceci:
Ensuite, vous pouvez mettre ce contenu dans Android WebView, et il va travailler nice.
Espère que cela va aider quelqu'un!
Cela a fonctionné pour moi: