Это XPath 1.0 логическое выражение :
boolean(/Payload/row[@IncidentNumber=preceding-sibling::row/@IncidentNumber])
С этим входом:
<Payload>
<row IncidentNumber="PD1"/>
<row IncidentNumber="PD1"/>
<row IncidentNumber="PD1"/>
</Payload>
Выход:
true
Проверка в здесь
И это с этим входом:
<Payload>
<row IncidentNumber="PD1"/>
<row IncidentNumber="PD2"/>
<row IncidentNumber="PD3"/>
</Payload>
Выход:
false
Тест в здесь
РЕДАКТИРОВАТЬ : правильная XPath 1.0 отличная / повторяющаяся идиома. Читайте как: "есть ли row
, какой атрибут @IncidentNumber
равен любому предшествующему?"
Примечание : сравнение наборов узлов является экзистенциальным сравнением , Из спецификации c:
Если оба сравниваемых объекта являются наборами узлов, то сравнение будет истинным, если и только если в первом наборе узлов есть узел и узел во втором наборе узлов, так что результат выполнения сравнения строковых значений двух узлов равен true.