2

私は SimpleXML (Java) を使用しており、リストの兄弟の 1 つの値に基づいてオブジェクトのリストを取得しようとしています。

だから、ここに私の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>

私がやろうとしているのは、リストの兄弟"ittype"が"Service_Links"に等しいすべての"リンク"のリストを取得するために、XPath を使用して SimpleXML 注釈を作成することです。

したがって、たとえば、これは機能しますが、最初の「リソース」ノードを静的に取得しようとしている場合のみです(兄弟の「ittype」に基づいて「リソース」ノードを動的に取得するのではなく:

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

「リソース」ノードを動的に見つけるために xpath をフォーマットする方法をたくさん試しましたが、ここにすべてをリストすることはできませんでした。ただし、これは私が試した1つの例であり、うまくいくはずです。私が間違っていることはわかりません...

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

私はここSOを含め、たくさんのことをグーグルで検索しましたが、非常によく似たものを見つけることができません。そして、私が見つけたものは、私が何をする必要があるかを見つけるのに十分に翻訳されていませんでした. たとえば、この SOはかなり似ていますが、機能していないようです。



更新 #1 (10 月 8 日 @ 午後 12 時 38 分)

フィードバックごとに、私はこれを試しました:

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

サイコロなし: org.simpleframework.xml.core.PathException: フィールド 'links' のパス 'metadata/resources/resource[ittype='Service_Links']' の無効なインデックス

4

3 に答える 3

1

このスタイルの XPath を実装する SimpleXml を入手したことはありません。彼らのドキュメントをより徹底的に読んだところ、彼らはこの XPath 機能をまだ実装していないようです。

そこで、ここで別の XML 解析戦略に落ち着きました: https://stackoverflow.com/a/13236117/483257

于 2012-11-05T16:23:55.737 に答える
0

特にSimpleXMLについては知りませんが、このxpathは必要な要素を取得するはずです:

metadata/resources/resource[ittype = 'Service_Links']
于 2012-09-28T23:21:29.523 に答える
0
  1. あなたの xml の例は整形式ではありません。要素には、link対応する終了要素がありません。description同じことがエルにも当てはまります。これらは単なるタイプミスだと思います。
  2. 動作する XPath 式は次のとおりです。

/metadata/resources/resource/links/link[parent::links/preceding-sibling::ittype/text()=='Service_Links']

またははるかに単純なバージョン:

/metadata/resources/resource[ittype = 'Service_Links']/links/link

于 2012-09-28T23:24:20.280 に答える