Редактирование: я думаю, что нашел ответ, но я оставлю открытое немного, чтобы узнать, есть ли у кого-то коррекция/улучшение.xpath - соответствие значения дочернего элемента в текущем узле со значением элемента в родительском
Я использую xpath в инструменте etl Talend. У меня есть XML, как это:
<root>
<employee>
<benefits>
<benefit>
<benefitname>CDE</benefitname>
<benefit_start>2/3/2004</benefit_start>
</benefit>
<benefit>
<benefitname>ABC</benefitname>
<benefit_start>1/1/2001</benefit_start>
</benefit>
</benefits>
<dependent>
<benefits>
<benefit>
<benefitname>ABC</benefitname>
</benefit>
</dependent>
При анализе преимуществ для иждивенцев, я хочу, чтобы получить элементы, присутствующие в выгоды элемента работника. Таким образом, в приведенном выше примере, я хочу получить 1/1/2001 для начальной даты зависимого . Я хочу 1/1/2001, а не 2/3/2004, потому что преимущество зависимого имеет преимущество ABC, соответствующее вознаграждению сотрудника с тем же самым преимуществом.
Что XPath, по отношению к/корневой/сотрудника/зависимый/выгоды/пользу, даст значение benefit_start на благо под родительским работника, который имеет такое же имя выгоды как зависимую имя выгоды ? (Заметьте, что я не знаю заранее, что такое буквальное значение, я не могу просто искать «ABC», мне нужно сопоставить любое значение в элементе списка преимуществ зависимого.
Я пытаюсь:
../../../benefits/benefit[benefitname=??what??]/benefit_start
Я не знаю, как ссылаться на предок текущего узла в середине в xpath (так как я думаю «.» в точке, где у меня есть ??, что будет ссылаться на на льготный узел сотрудника/пособия.
EDIT: Я думаю то, что я хочу, это «current()/Benefname», где? является. Кажется, работать с саксоном, я еще не пробовал его в инструменте etl.
(+1) Хорошее решение. Просто сомневаюсь: это 'current()' стандартная функция XPath? (Или это XLST или XQuery или другое?) – acdcjunior
@acdcjunior 'current()' является частью XSLT. Это не в спецификации XPath, это позор, потому что это очень полезно. – JLRishe
Да, действительно. Спасибо за разъяснения! – acdcjunior