suppose we have the following XML document:
<visits>
<folder>
<consultation date="2015-07-01" doctor="d4"> ... </consultation>
<consultation date="2016-05-02" doctor="d1"> ... </consultation>
<consultation date="2020-01-01" doctor="d3"> ... </consultation>
<consultation date="2021-12-02" doctor="d2"> ... </consultation>
<patient id="p2">
<name>aaaa</name>
<phone>..</phone>
</patient>
</folder>
<folder>
<consultation date="2017-01-01" doctor="d2"> ... </consultation>
<consultation date="2019-01-01" doctor="d4"> ... </consultation>
<patient id="p1">
<name>bbbbb</name>
<phone>...</phone>
</patient>
</folder>
<doctor id="d1">
<speciality>gynecologist</speciality>
</doctor>
<doctor id="d2">
<speciality>cardiologist</speciality>
</doctor>
<doctor id="d3">
<speciality>gynecologist</speciality>
</doctor>
<doctor id="d4">
<speciality>cardiologist</speciality>
</doctor>
in XPath 1.0, I want to get the patients who have seen doctors of all specialties.
Here is my attempt:
//patient[count (../consultation[????]) =
count(//doctor[not (speciality = preceding-sibling::doctor/speciality)])]