0

目的のノードを選択するための 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 つの質問をしたいと思います。

  1. 各従業員の ID 属性を取得するにはどうすればよいですか?
  2. 各従業員の名前要素を取得するにはどうすればよいですか?
  3. 最後になりましたが、最も重要なことですが、各従業員の Job ノードを取得するために指定する必要がある XPath は何ですか? 私はフォローしようとしましたが、成功しませんでした:(

node.selectNodes("/Emp/Employment_History/job"); //これはゼロのノードを返します (または) node.selectNodes("//Emp/Empployment_History/job");// これは期待以上のノードを返します

4

1 に答える 1

1

私の理解が正しければ、「各従業員のジョブ ノード」と言うとき、XML ファイル内のすべてのジョブ ノードを返す XPath を探しているのではなく、メソッドを実装してプルすることを探していますParseEmployee。ドキュメントから特定の従業員 (渡された XML ノードによって識別される) のジョブのリストか?

これは次のように実装できます (抽出された文字列で実際に何か役に立つ部分を省略し、含めたい null チェックなどを省略します!)

public parseEmployee (Element e) {
   String id = e.attributeValue("id");
   String name = e.elements("name").get(0).getText();
   List<Element> jobs = e.elements("job");
   for (Element job : jobs) {
       parseJob(job);
   }
}

parseJob()<job>同様の原則で動作し、渡された要素から関連情報を引き出します。

于 2012-01-31T11:48:36.020 に答える