How can I count on Xpath the nodes within several sibling nodes?

0

I want to have the doctors that have each node in the service nodes, being these grandchildren of services and children of doctors.

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE hospital>
<hospital tipo="3" camas="1300" ciudad="Zafra">
<nombre>Hospital Catobe</nombre>
<lista_servicios>
<servicio planta="3">
<especialidad codigo="TX">Traumatología</especialidad>
<capacidad>20</capacidad>
<medicos>
<doctor clase="Jefe">
  <nombre>Juan</nombre><apellidos>Rama Pinto</apellidos>
</doctor>
<doctor clase="Interino">
 <nombre>Silvia</nombre><apellidos>Leal Tora</apellidos>
</doctor>
<doctor clase="R2">
  <nombre>Raquel</nombre><apellidos>Fuentes Lar</apellidos>
</doctor>
</medicos>
<lista_pacientes llena="N" dificultad="Media">
<paciente dni="11" nombre="Pedro" apellidos="Cano Rubio">
<gravedad>3</gravedad>
</paciente>
<paciente dni="88" nombre="Jaime" apellidos="Roda Toro">
<gravedad/>
</paciente>
</lista_pacientes>
</servicio>
<servicio planta="5">
<especialidad>Neurología</especialidad>
<capacidad>30</capacidad>
 <medicos>
  <doctor clase="Jefe">
  <nombre>Ana</nombre><apellidos>Palo Ras</apellidos>
</doctor>
<doctor clase="Interino">
<nombre>Manuel</nombre><apellidos>Mino Marrero</apellidos>
</doctor>
</medicos>
<lista_pacientes>
<paciente dni="22" nombre="Miguel" apellidos="Grajo Manzano">
<gravedad>1</gravedad>
</paciente>
<paciente dni="77" apellidos="Sora Burgos">
<gravedad>3</gravedad>
</paciente>
</lista_pacientes>
</servicio>
<servicio planta="7">
<especialidad codigo="OF">Oftalmología</especialidad>
<capacidad>24</capacidad>
<medicos>
<doctor clase="Jefe">
<nombre>Henar</nombre><apellidos>Vara Paz</apellidos>
</doctor>
<doctor clase="R2">
<nombre>Silvia</nombre><apellidos>Morales Ron</apellidos>
</doctor>
<doctor clase="Interino">
<nombre>Juan</nombre><apellidos>Abad Berra</apellidos>
</doctor>
</medicos>
<lista_pacientes llena="S" dificultad="Media">
<paciente dni="99" apellidos="Arroyo Cabral">
<gravedad>3</gravedad>
</paciente>
<paciente dni="55" nombre="Emilia" apellidos="Callejas Conde">
<gravedad>2</gravedad>
</paciente>
<paciente dni="33" nombre="Enrique" apellidos="Landa Seja">
<gravedad/>
</paciente>
</lista_pacientes>
</servicio>
</lista_servicios>
</hospital>
    
asked by Guillermo González Cotta 16.03.2018 в 19:29
source

1 answer

0

I understand that what you are looking for is obtained with the following expression:

//servicio/count(.//doctor)

Result:

Int64='3'
Int64='2'
Int64='3'

Note . Requires XPath version 2 or higher. I have verified that it works in link With lower versions of XPath it is not possible to do what you want with an XPath expression. You would need to recover the list of services with "//servicios" and iterate over each of the nodes to make a count(.//doctor) in each, and go accumulating results. That is, you need to program it and that depends on which language you use.

    
answered by 16.03.2018 в 20:31