Selección de XPath (SimpleXML) del niño según el valor del hermano del niño
Estoy usando SimpleXML (Java) y estoy tratando de obtener una lista de objetos basada en el valor de uno de los hermanos de la lista.
Entonces, aquí está mi XML:
<xml>
<metadata>
<resources>
<resource>
<ittype>Service_Links</ittype>
<links>
<link>
<path>http://www.stackoverflow.com</path>
<description>Stack Overflow</description>
</link>
<link>
<path>http://www.google.com</path>
<description>Google</description>
</link>
</links>
</resource>
<resource>
<ittype>Article_Links</ittype>
<links>
...
</links>
</resource>
...
</resources>
</metadata>
</xml>
Lo que estoy tratando de hacer es crear una anotación SimpleXML usando XPath para obtener una lista de todos los"campo de golf" donde el hermano de la lista"ittype" es igual a"Service_Links".
Entonces, por ejemplo, esto funciona, pero solo si estoy tratando de obtener estáticamente la primera"recurso"-nodo (a diferencia de obtener dinámicamente el"recurso"-nodo basado en lo que es hermano"ittype" es:
@ElementList(name="links")
@Path("metadata/resources[1]/resource")
public List<Link> link;
He intentado tantas maneras de formatear el xpath para encontrar dinámicamente el"recurso"-nodo quiero que no pueda enumerarlos todos aquí; sin embargo, este es un ejemplo que he probado que me parece que debería funcionar; no tengo idea de lo que estoy haciendo mal ...
@ElementList(name="links")
@Path("metadata/resources[resource/ittype='Service_Links']/resource")
public List<Link> link;
He buscado en Google una tonelada, incluso aquí en SO, y simplemente no puedo encontrar mucho muy similar; y lo que encontré, no se tradujo lo suficientemente bien como para que pudiera detectar lo que tenía que hacer. Por ejemplo,este SO No parece funcionar a pesar de que es bastante similar.
ACTUALIZACIÓN # 1 (8OCT @ 12:38 pm)
Por retroalimentación, he intentado esto:
@ElementList
@Path("metadata/resources/resource[ittype='Service_Links']")
public List<Link> link;
No dice: org.simpleframework.xml.core.PathException: índice no válido para la ruta 'metadata / resources / resource [ittype =' Service_Links ']' en el campo 'links'