编程语言
首页 > 编程语言> > java-根据子级的同级值选择子级的XPath(SimpleXML)

java-根据子级的同级值选择子级的XPath(SimpleXML)

作者:互联网

我正在使用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”.

因此,例如,这有效,但仅当我尝试静态获取第一个“资源”节点时(相对于基于同级“ ittype”的动态获取“资源”节点是:

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

我已经尝试了多种方法来格式化xpath以便动态地找到我想要的“资源”节点,以至于我无法在此处全部列出它们.但是,这是我尝试过的一个例子,对我来说似乎应该起作用.不知道我在做什么错…

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

我已经在Google上搜索了很多,包括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:“链接”字段中路径“元数据/资源/资源[ittype =’Service_Links’]”的无效索引

解决方法:

我从来没有获得过SimpleXml来实现这种样式的XPath.从更彻底地阅读文档开始,看来他们还没有实现此XPath功能.

所以我在这里选择了另一种XML解析策略:https://stackoverflow.com/a/13236117/483257

标签:java,xml,xpath,simple-framework
来源: https://codeday.me/bug/20191011/1892116.html