2

我正在使用 dom4j 通过使用 XPath 技术来选择所需节点来读取 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>
            <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 对你来说可能看起来很难看,但我只是为了理解和保持我的项目的保密性而创建这个虚拟文件

当我指定一些简单的 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>"

谁能指导我的 XPath 出了什么问题?

我的第二个问题是,我如何只选择永久雇员的 Emp_Bio 节点,这行得通吗?

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

1 回答 1

4

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

(注意删除/

然后使用这个 ://Emp_Dir/Emp_Classification[@type='Permanent']/Emp/Emp_Bio用于问题的后半部分。

于 2011-10-12T04:16:07.190 回答