2011-10-12 5 views
2

Je lis un XML en utilisant dom4j en utilisant des techniques XPath pour sélectionner les nœuds désirés. Considérez que mon XML ressemble à ceci:dom4j: Comment résoudre cette erreur XPath?

<Emp_Dir> 
    <Emp_Classification type ="Permanent" > 
     <Emp id= "1"> 
     <name>jame</name> 
      <Emp_Bio> 
       <age>12</age> 
       <height>5.4</height> 
     <weight>78</weight> 
      </Emp_Bio> 
      <Emp_Details> 
       <salary>2000</salary> 
     <designation>developer</designation> 
      </Emp_Details> 
     </Emp> 
     <Emp id= "2"> 
     <name>jame</name> 
      <Emp_Bio> 
       <age>12</age> 
       <height>5.4</height> 
     <weight>78</weight> 
      </Emp_Bio> 
      <Emp_Details> 
       <salary>2000</salary> 
     <designation>developer</designation> 
      </Emp_Details> 
     </Emp> 
    </Emp_Classification> 

    <Emp_Classification type ="Contract" > 
    . 
    . 
    . 
    </Emp_Classification> 

    <Emp_Classification type ="PartTime" > 
    . 
    . 
    . 
    </Emp_Classification> 
</Emp_Dir> 

Note: La puissance XML ci-dessus semble laid pour vous, mais je crée que ce fichier factice pour le bien de comprendre et de garder le secracy de mon projet

Quand je spécifiez une expression XPath simple, comme:

//Emp_Classification (or) 
/Emp_Dir/Emp_Classification 

puis ses œuvres bien mais quand je spécifie une expression complexe comme:

/Emp_Dir/Emp_Classification/[@type='Permanent'] (or) 
//Emp_Dir/Emp_Classification/[@type='Permanent'] 

il me donne l'erreur suivante:

"Invalid XPath expression: /Emp_Dir/Emp_Classification/[@type='Permanent'] Expected one of '.', '..', '@', '*', <QName>" 

Coulde quelqu'un me guide ce qui va mal dans mon XPath?

Ma deuxième question est de savoir comment sélectionner le nœud Emp_Bio des employés permanents seulement, est-ce que cela fonctionne?

//Emp_Dir/Emp_Classification/[@type='Permanent']/Emp/Emp_Bio 

Répondre

4

Utilisation: //Emp_Dir/Emp_Classification[@type='Permanent']

(notez la suppression de /)

Et puis utilisez ceci: //Emp_Dir/Emp_Classification[@type='Permanent']/Emp/Emp_Bio pour la dernière partie de la question.