dom4j: как решить эту ошибку XPath? - PullRequest
2 голосов
/ 12 октября 2011

Я читаю XML, используя dom4j, используя методы XPath для выбора нужных узлов.Учтите, что мой 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

1 Ответ

4 голосов
/ 12 октября 2011

Использование: //Emp_Dir/Emp_Classification[@type='Permanent']

(обратите внимание на удаление /)

И затем используйте это: //Emp_Dir/Emp_Classification[@type='Permanent']/Emp/Emp_Bio для последней части вопроса.

...