Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XPath(SimpleXML)根据child的值选择child';兄弟姐妹_Java_Xml_Xpath_Simple Framework - Fatal编程技术网

Java XPath(SimpleXML)根据child的值选择child';兄弟姐妹

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

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

服务链接
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']
  • 您的xml示例格式不正确。
    链接
    元素没有结束对应项。
    描述
    元素也没有结束对应项。我假设这些只是打字错误
  • 以下是有效的XPath表达式:
  • /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的链接,谢谢!这会派上用场的。