Java XPath(SimpleXML)根据child的值选择child';兄弟姐妹
我正在使用SimpleXML(Java),并试图根据列表的一个同级的值获取对象列表 下面是我的XML:Java XPath(SimpleXML)根据child的值选择child';兄弟姐妹,java,xml,xpath,simple-framework,Java,Xml,Xpath,Simple Framework,我正在使用SimpleXML(Java),并试图根据列表的一个同级的值获取对象列表 下面是我的XML: <xml> <metadata> <resources> <resource> <ittype>Service_Links</ittype> <links> <link> <path>h
<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>
服务链接
http://www.stackoverflow.com
堆栈溢出
http://www.google.com
谷歌
文章链接
...
...
我试图做的是使用XPath创建一个SimpleXML注释,以便获得所有链接的列表,其中列表的同级“ittype”等于“服务链接”
例如,如果我试图静态获取第一个“resource”-节点(而不是根据其兄弟节点动态获取“resource”-节点),“ittype”是:
@ElementList(name="links")
@Path("metadata/resources[1]/resource")
public List<Link> link;
@ElementList(name=“links”)
@路径(“元数据/资源[1]/resource”)
公共列表链接;
我已经尝试了很多方法来格式化xpath,以动态查找我想要的“资源”-节点,因此我不可能在这里列出所有节点;然而,这是我尝试过的一个示例,在我看来它应该起作用;不知道我做错了什么
@ElementList(name="links")
@Path("metadata/resources[resource/ittype='Service_Links']/resource")
public List<Link> link;
@ElementList(name=“links”)
@路径(“元数据/资源[resource/ittype='Service\u Links']/resource”)
公共列表链接;
我在谷歌上搜索了很多东西,包括这里,但都找不到非常相似的东西;而我找到的东西,翻译得不够好,无法让我找到我需要做的事情。例如,尽管它们非常相似,但似乎不起作用
更新#1(10月8日下午12:38) 根据反馈,我尝试了以下方法:
@ElementList
@Path("metadata/resources/resource[ittype='Service_Links']")
public List<Link> link;
@ElementList
@路径(“元数据/资源/资源[ittype='Service_Links']”)
公共列表链接;
没有骰子:
org.simpleframework.xml.core.PathException:字段“Links”中路径“metadata/resources/resource[ittype='Service\u Links']”的索引无效我不知道SimpleXML的具体情况,但此xpath应该可以为您获取所需的元素:
metadata/resources/resource[ittype = 'Service_Links']
链接
元素没有结束对应项。描述
元素也没有结束对应项。我假设这些只是打字错误/metadata/resources/resource/links/link[parent::links/previous sibling::ittype/text()
或者更简单的版本:
/metadata/resources/resource[ittype='Service\u Links']/Links/link
我从未让SimpleXml实现这种XPath风格;通过更彻底地阅读他们的文档,看起来他们还没有实现这种XPath功能
因此,我在这里选择了一种不同的XML解析策略:谢谢您的回复;是的,这些只是我在这里发布的文章中的拼写错误;我已经纠正了它们;今天将尝试您的答案并提供反馈。@Jiri…仅供参考…您提供的XPath与使用SimpleXML时的工作方式不完全相同(或者至少我不认为它是这样的;我已经尝试过了,但似乎没有);最接近的是Ian的答案是如何格式化的,尽管这也不起作用(请参阅我问题底部的“更新”)。抱歉,我不知道SimpleXML框架,但XPath本身应该可以().关于转义引号呢?这是一个类似的线程,有类似的异常@Jiri…是的,不,你的xpath是对的,我确信,只是似乎不适合SimpleXml的API(或者我似乎无法使它适合任何方式);不过,我很感谢指向xpathtester的链接,谢谢!这会派上用场的。