Xpath problem

Hi!



I recently started developing my first plugin, and so far it has worked out just fine. However, I have a small problem using Xpath. Here’s an explanation:



I got a xml looking like:



<br />
<e2event><br />
<e2eventid><br />
57070<br />
</e2eventid><br />
<e2eventstart><br />
1361307600<br />
</e2eventstart><br />
<e2eventduration><br />
4200<br />
</e2eventduration><br />
<e2eventcurrenttime><br />
1361311791<br />
</e2eventcurrenttime><br />
<e2eventtitle><br />
Spartacus: War of the Damned<br />
</e2eventtitle><br />
<e2eventdescription><br />
(2:10) Amerikansk actionserie.<br />
</e2eventdescription><br />
<e2eventdescriptionextended><br />
Spartacus fører an i et dristig angrep for å skaffe mat og ly til sitt folk. Crassus bygger opp en fryktinngytende hær samtidig som han får et uventet besøk.<br />
</e2eventdescriptionextended><br />
<e2eventservicereference><br />
1:0:1:1772:47:46:E080000:0:0:0:<br />
</e2eventservicereference><br />
<e2eventservicename><br />
MAX<br />
</e2eventservicename><br />
</e2event><br />




I'm reading the different values with i.e.

<br />
epgdescription = urlHtml.xpath("//e2eventdescription/text()")<br />




This way, I read out all the values, and getting lists, normally with the same amount of strings in it. The problem occurs when the xml sometimes don't fill inn empty values, and I get like this:


<br />
<e2event><br />
<e2eventid><br />
32537<br />
</e2eventid><br />
<e2eventstart><br />
1361307600<br />
</e2eventstart><br />
<e2eventduration><br />
4800<br />
</e2eventduration><br />
<e2eventcurrenttime><br />
1361311791<br />
</e2eventcurrenttime><br />
<e2eventtitle><br />
24/7: NHL Penguins vs Capitals<br />
</e2eventtitle><br />
<e2eventdescription/><br />
<e2eventdescriptionextended><br />
Nå får du eksklusiv tilgang til hockeyrivalene Pittsburgh Penguins og Washington Capitals når de gjør seg klare til 2011 NHL Winter Classic.<br />
</e2eventdescriptionextended><br />
<e2eventservicereference><br />
1:0:1:196:4:46:E080000:0:0:0:<br />
</e2eventservicereference><br />
<e2eventservicename><br />
Discovery (N)<br />
</e2eventservicename><br />
</e2event><br />




If you look at , there is no value here. My list will then be missing one value, messing up everything, and finally crash my plugin with a "index out of bounds" fault.

Is there a simple solution to be sure we get a string in the list? If there is no value in the XML, i want an empty string in my list. Probably a easy solution, but new to this so... :)

oysteing

Sounds like you’re trying to grab multiple separate lists and then title[3] goes with description[3] etc.



I’d suggest grabbing the whole event (assuming there are multiple in the full XML). Something like this:


<br />
events = html.xpath("//e2events")<br />
<br />
for event in events:<br />
	title = event.xpath("./e2eventtitle")<br />
	desc = event.xpath("./e2eventdescription")<br />
	..... do whatever you want with that information<br />




that way everything will remain synched, and you can then add logic to handle blanks if you wanted to give them some default value.


<br />
if desc == "":<br />
	desc = "No Description Available<br />


Yep what aclark20 says ^^^



Looping through is the best way to handle that sort of stuff.

Thanx!



Tried it out this way, and it works perfectly. :slight_smile:

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.