Вопрос довольно большой :) Но это то, чего я хочу достичь.
Я зацикливаюсь на каждом родительском элементе (сотруднике), а затем на каждом дочернем элементе родителя (зависимого) и нуждаюсьчтобы сопоставить их вместе, используя третий элемент, называемый Election, в зависимости от того, совпадает ли зависимый идентификатор (Dep_ID) в двух отдельных строках.
Таким образом, XML выглядит так:
<Employee>
<Dependent><Depedent_ID>101</Depedent_ID> </Dependent>
<Dependent><Depedent_ID>102</Depedent_ID> </Dependent>
<Dependent><Depedent_ID>103</Depedent_ID> </Dependent>
<Election Status="Current">
<Dependent>
<Dep_ID @id=102/>
</Dependent>
<Dependent>
<Dep_ID @id=103/>
</Dependent>
</Election>
<Election Status="Previous">
<Dependent>
<Dep_ID @id=103/>
</Dependent>
<Dependent>
<Dep_ID @id=102/>
</Dependent>
<Dependent>
<Dep_ID @id=101/>
</Dependent>
</Election>
</Employee>
Итак, точный вопросдля каждого иждивенца, посмотрите, был ли он там на предыдущих выборах, но не на текущих выборах.
Мой существующий код действует так, как будто он проверяет только первого зависимого.Например: мне нужен способ написать выражение xpath, чтобы сначала проверить, равен ли какой-либо из Dep_Ids в элементе Previous Elections значение 100, а затем проверить, не равен ли 100 Dep_Ids в текущих выборах.Но существующий код проверяет первый элемент.Как заставить мой код проверять все дочерние «зависимые» элементы в элементе «Выборы»?
Я уверен, что это что-то простое, но я не могу его получить.
Мойсуществующий код: (Я зацикливаюсь на дочернем зависимом элементе элемента employee на данный момент)
<xsl:if test="parent::*/wd:Benefit_Elections[(wd:Status/@wd:Descriptor='Previous')]/wd:Benefit_Dependents/wd:ID[@wd:type='Dependent_ID']=wd:Dep_ID">
<xsl:if test="count(parent::*/wd:Benefit_Elections[wd:Status/@wd:Descriptor='Current'] /wd:Benefit_Dependents)=0 or parent::*/wd:Benefit_Elections[wd:Coverage_Type='Medical/Vision' and (wd:Status/@wd:Descriptor='Current')]/wd:Benefit_Dependents/wd:ID[@wd:type='Dependent_ID']!=wd:Dep_ID">
UPDATE Dimitre попросил меня упростить / сделать отступ для кода выше для лучшей читаемости.Как я уже говорил, у меня есть два утверждения, в которых эти проверки должны быть сделаны.Я также открыт для использования одного оператора, но я не могу заставить его работать.
На этом этапе код зацикливается на каждом дочернем зависимом элементе элемента Employee.Затем код зацикливается на элементе «Выборы преимущества» родительского элемента Employee и проверяет, равен ли текущий зависимый идентификатор любому из дочерних зависимых идентификаторов элемента выбора преимущества со статусом «предыдущий».Это работает не во всех случаях, так как эта проверка происходит только для первого зависимого элемента «выборов пособия».
Упрощенный код моего заявления: Я в цикле за каждым сотрудником/ Зависимый в этой точке.
<xsl:if test=
"parent::*/Election[(Status='Previous')]
/Dependent/Dep_ID/@id=Depedent_ID">
<!-- DO SOMETHING HERE if above condition is true but this is checking only the first "Dependent element.-->
Так что мой вопрос действительно: «В приведенном выше утверждении, как я могу проверить, равен ли Dependent_ID ЛЮБОМУ из Election / Dependent / Dep_ID / @ id родителя? Iнадеюсь, это прояснит вопрос. Спасибо.
Итак, еще раз в качестве примера, я хочу, чтобы это условие возвращало TRUE при проверке на Depedent_ID = 101, потому что 101 не присутствует на текущих выборах, но присутствовална предыдущих выборах.