Я использую парсеры XPATH 1.0 вместе с CLiXML в своем проекте JAVA, я пытаюсь настроить файл правил ограничения CLiXML.
Я хотел бы показать ошибку, если в конкретном дочернем элементе есть повторяющиеся имена элементов.
Например
<parentNode version="1">
<childA version="1">
<ignoredChild/>
</childA>
<childB version="1">
<ignoredChild/>
</childB>
<childC version="4">
<ignoredChild/>
</childC>
<childA version="2">
<ignoredChild/>
</childA>
<childD version="6">
<ignoredChild/>
</childD>
</parentNode>
childA появляется более одного раза, поэтому я бы показал ошибку об этом.
ПРИМЕЧАНИЕ. Я хочу только «проверить / посчитать» имя элемента, а не атрибуты внутри или дочерние элементы элемента.
Код в моем файле правил .clx, который я пробовал:
<forall var="elem1" in=".//parentNode/*">
<equal op1="count(.//parentNode/$elem1)" op2="1"/>
</forall>
Но это не работает, я получаю сообщение об ошибке:
Caused by: class org.jaxen.saxpath.XPathSyntaxException: count(.//PLC-Mapping/*/$classCount: 23: Expected one of '.', '..', '@', '*', <QName>
Поскольку я хочу, чтобы код проверял каждое дочернее имя и запускал другой запрос xPath с именем дочернего имени - если число превышает 1, то это должно выдать ошибку.
Есть идеи?