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']
- 您的xml示例格式不正确。
link
元素没有结束副本。 这同样适用于description
el。 我认为这些只是错别字。 - 这是工作的XPath表达式:
/metadata/resources/resource/links/link[parent::links/preceding-sibling::ittype/text()=='Service_Links']
或更简单的版本:
/metadata/resources/resource[ittype = 'Service_Links']/links/link