2011-10-12 176 views
2

我正在使用dom4j通過使用XPath技術選擇所需節點來讀取XML。考慮到我的XML看起來像這樣:dom4j:如何解決此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> 

注:以上XML可能看起來醜陋給你,但我只創造便於理解這個虛擬文件,並保持我的項目的secracy

當我指定一些簡單的XPath表達式,如:

//Emp_Classification (or) 
/Emp_Dir/Emp_Classification 

那麼它工作正常,但當我指定像一些複雜的表達式:

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

然後它給了我下面的錯誤:

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

Coulde有人指導我怎麼在我的XPath錯在何處?

我的第二個問題是,我如何選擇永久員工的Emp_Bio節點,這是否工作?

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

回答

4

用途://Emp_Dir/Emp_Classification[@type='Permanent']

(注意去除/

,然後使用此://Emp_Dir/Emp_Classification[@type='Permanent']/Emp/Emp_Bio的問題的後半部分。