我正在使用SimpleXML(Java),我正在尝试根据列表中某个兄弟的值获取对象列表。
所以,这是我的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>
我要做的是使用XPath创建一个SimpleXML注释,以获得所有“链接”的列表,其中列表的兄弟“ittype”等于“Service_Links”。
因此,例如,这只有在我尝试静态获取第一个“资源” -node(而不是动态获取“资源” -node基于它的兄弟“ittype”是:
@ElementList(name="links")
@Path("metadata/resources[1]/resource")
public List<Link> link;
我已经尝试了很多方法来格式化xpath以动态找到“资源” -node我希望我不能在这里列出所有这些;然而,这是我试过的一个例子,在我看来应该有用;不知道我做错了什么......
@ElementList(name="links")
@Path("metadata/resources[resource/ittype='Service_Links']/resource")
public List<Link> link;
我已经谷歌搜索了一下,包括在这里的SO,并且发现不太相似;而我所找到的,并没有很好的翻译,以便我发现我需要做什么。例如,this SO似乎不起作用,即使它非常相似。
更新#1(8OCT @ 12:38 pm)
根据反馈,我试过这个:
@ElementList
@Path("metadata/resources/resource[ittype='Service_Links']")
public List<Link> link;
没有骰子: org.simpleframework.xml.core.PathException:字段'links'中路径'metadata / resources / resource [ittype ='Service_Links']'的索引无效
答案 0 :(得分:1)
我从来没有使用SimpleXml来实现这种样式的XPath;通过更彻底地阅读他们的文档,看起来他们还没有实现这个XPath功能。
所以我在这里找到了一个不同的XML解析策略:https://stackoverflow.com/a/13236117/483257
答案 1 :(得分:0)
我不是特别了解SimpleXML,但是这个xpath可以为你提供你想要的元素:
metadata/resources/resource[ittype = 'Service_Links']
答案 2 :(得分:0)
link
元素没有结束对应元素。这同样适用于description
el。我认为这些只是错别字。 /metadata/resources/resource/links/link[parent::links/preceding-sibling::ittype/text()=='Service_Links']
或更简单的版本:
/metadata/resources/resource[ittype = 'Service_Links']/links/link