XPath(SimpleXML)根据孩子的兄弟姐妹的价值选择孩子

我正在使用SimpleXML(Java),我正在尝试根据列表中某个兄弟的值获取对象列表。

那么,这是我的XML:

    Service_Links   http://www.stackoverflow.com Stack Overflow   http://www.google.com Google     Article_Links  ...   ...    

我想要做的是使用XPath创建一个SimpleXML注释,以获得列表的兄弟“ittype”等于“Service_Links”的所有“链接”的列表。

因此,例如,这只有在我尝试静态获取第一个“资源” –节点(而不是根据它的兄弟“ittype”动态获取“资源” –节点时),这是有效的:

 @ElementList(name="links") @Path("metadata/resources[1]/resource") public List link; 

我已经尝试了很多方法来格式化xpath来动态地找到“资源” –我想要的节点,我不可能在这里列出它们; 然而,这是我试过的一个例子,在我看来应该有用; 不知道我做错了什么……

 @ElementList(name="links") @Path("metadata/resources[resource/ittype='Service_Links']/resource") public List link; 

我已经谷歌搜索了一下,包括在这里的SO,并且发现不太相似; 而我所找到的,并没有很好的翻译,以便我发现我需要做什么。 例如,即使它非常相似, 这个SO似乎也不起作用。


更新#1(8OCT @ 12:38 pm)

根据反馈,我试过这个:

 @ElementList @Path("metadata/resources/resource[ittype='Service_Links']") public List link; 

没有骰子:org.simpleframework.xml.core.PathException:字段’links’中路径’metadata / resources / resource [ittype =’Service_Links’]’的索引无效

我从来没有使用SimpleXml来实现这种风格的XPath; 从更彻底地阅读他们的文档,看起来他们还没有实现这个XPathfunction。

所以我在这里找到了一个不同的XML解析策略: https : //stackoverflow.com/a/13236117/483257

我不是特别了解SimpleXML,但是这个xpath应该可以获得你想要的元素:

 metadata/resources/resource[ittype = 'Service_Links'] 
  1. 您的xml示例格式不正确。 link元素没有结束副本。 这同样适用于description el。 我认为这些只是错别字。
  2. 这是工作的XPath表达式:

/metadata/resources/resource/links/link[parent::links/preceding-sibling::ittype/text()=='Service_Links']

或更简单的版本:

/metadata/resources/resource[ittype = 'Service_Links']/links/link