私は現在、XML フィードの解析 (Atom 2005) を意味するプロジェクトに取り組んでおり、これを行うために Rome を使用しています。
現在、解析する XML 構造は 2 種類あります。
最初のタイプ:
<?xml version="1.0" encoding="UTF-8"?>
<feed
xmlns="http://www.w3.org/2005/Atom"
xml:base="..." >
<id>...</id>
<title type="text" >...</title>
<entry xmlns="http://www.w3.org/2005/Atom" >
<id>...</id>
</entry>
<entry xmlns="http://www.w3.org/2005/Atom" >
<id>...</id>
</entry>
...
</feed>
(複数のエントリを含む 1 つのフィード)
2 番目のタイプ:
<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom" >
<id>...</id>
</entry>
(1 つのエントリですが、「フィード」には含まれません)
私の目的は、入力 XML を解析して情報を取得する Bean "MyEntry" を作成することです。私の理想は、コンストラクターを 1 つ持つことです (たとえば、引数として SyndEntry を取ります)。
私はそれをしました:
public MyEntry( SyndEntry e ) {
_entry = e;
}
最初のタイプの XML フィードを取得すると、「SyndEntry」オブジェクトを取得できます。
SyndFeedInput feed_input = new SyndFeedInput();
...
SyndFeed feed = feed_input.build(xml_file);
for ( SyndEntry e : feed.getEntries() ) {
// I can get SyndEntries from here
}
--> しかし、2 番目のタイプの XML には「フィード」コンテナがなく、XML から SyndEntry を直接構築する方法が見つかりません (「SyndEntryInput」のように?)。すべての情報にアクセス可能なままでも、「SyndEntry」ではなく「SyndFeed」が表示されます。
したがって、スーパークラス (SyndEntry と SyndFeed に共通するスーパークラスが見つかりません) または専用コンバーターを使用して、SyndFeed を SyndEntry に変換 (またはその逆) する方法を探しています。
私の現在の解決策は、2 つのコンストラクターを作成することです (1 つは「SyndFeed」を受け取り、もう 1 つは「SyndEntry」を受け取ります)。一般的な情報 (例: getSyndData().getTitle())
どんな助けやアイデアもいただければ幸いです