2010-06-06 16 views
2

J'essaye d'analyser le fichier HTML avec libxml2. Habituellement, cela fonctionne très bien, mais pas dans ce cas:libxml2 sur iPhone

<p> 
    <b>Titles</b> 
    (Some Text) 
    <table> 
     <tr> 
      <td valign="top"> 
       …Something1... 
      </td> 
      <td align="right" valign="top"> 
       …Something2... 
      </td> 
     </tr> 
    </table> 
</p> 

Je fais cette requête pour obtenir la première <td>

//p[b='Titles']/table/tr/td[0] 

mais rien est retourné parce libxml penser que <table> tag est pas un enfant d'un étiqueter <p> et le suivre.

Et enfin la question POURQUOI?

+0

Bonne question (+1). Voir ma réponse pour une explication du problème et une solution/solution facile. :) –

Répondre

1

Utilisez-vous HTML ou analyseur XML? AFAIR, HTML permet uniquement les éléments en ligne à l'intérieur <p> (vous ne pouvez pas mettre <table> en <p>), de sorte qu'il se ferme automatiquement <p> après avoir vu la balise <table> (en HTML, vous n'avez pas besoin de fermer chaque balise). Donc, votre code HTML est à peu près équivalent à (attributs omis):

<P> 
    <B>Titles</B> 
    Some text... 

<TABLE> 
    <TR> 
    <TD>...Something1... 
    <TD>...Something2... 
</TABLE> 

Essayez d'utiliser l'analyseur XML sous forme libxml au lieu de HTML.

1
//p[b='Titles']/table/tr/td[0] 

l'erreur est dans l'indexation. XPath utilise l'indexation basée sur 1.

L'expression XPath corrigée est:

//p[b='Titles']/table/tr/td[1]