目的のノードを選択するための XPath 手法を使用して、dom4j を使用して XML を読み取っています。私の XML が次のようになっているとします。
<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>
<Empployment_History>
<job>
<salary>2000</salary>
<designation>senior developer</designation>
<duration>2years</duration>
</job>
<job>
<salary>1000</salary>
<designation>developer</designation>
<duration>3years</duration>
</job>
</Empployment_History>
</Emp>
.
.
.
</Emp_Classification>
<Emp_Classification type ="Contract" >
.
.
.
</Emp_Classification>
<Emp_Classification type ="PartTime" >
.
.
.
</Emp_Classification>
</Emp_Dir>
注: 上記の XML は見苦しいかもしれませんが、このダミー ファイルを作成するのは、理解を深め、プロジェクトの機密性を維持するためだけです。
私の目標は、すべての正社員の雇用履歴を取得することです。このため、次の XPath 式を使用して、正社員のすべての「Emp」ノードを取得できました。
//Emp_Dir/Emp_Classification[@type='Permanent']/Emp
ノードを取得して保存するコードは次のようになります。
List<? extends Node> lstprmntEmps = document.selectNodes("//Emp_Dir/Emp_Classification/[@type='Permanent']/Emp");
ArrayList<Employee> Employees = new ArrayList<Employee>();//Employee is my custom class
for (Node node : lstprmntEmps)
{
Employees.add(ParseEmployee(node));//ParseEmployee(. . .) is my custom function that pareses emp XML and return Employee object
}
ここで、次の 3 つの質問をしたいと思います。
- 各従業員の ID 属性を取得するにはどうすればよいですか?
- 各従業員の名前要素を取得するにはどうすればよいですか?
- 最後になりましたが、最も重要なことですが、各従業員の Job ノードを取得するために指定する必要がある XPath は何ですか? 私はフォローしようとしましたが、成功しませんでした:(
node.selectNodes("/Emp/Employment_History/job"); //これはゼロのノードを返します (または) node.selectNodes("//Emp/Empployment_History/job");// これは期待以上のノードを返します