11

xmlファイルをプレーンオールドJavaオブジェクトにマップする最も簡単な方法を見つけようとしています。

注:私の例では、xmlが意図したPOJOと完全に一致していません。

///////// THE XML
<?xml version="1.0" encoding="UTF-8"?>
<Animal>
  <standardName>
    <Name>Cat</Name>
  </standardName>
  <standardVersion>
    <VersionIdentifier>V02.00</VersionIdentifier>
  </standardVersion>
</Animal>


////// THE INTENDED POJO
class Animal
{
 private String name;
 private String versionIdentifier;
}

JAXM要素名の注釈ではネストされた要素を指定できないため、通常のJAXB(注釈付き)は機能しません。(つまり、standardName / Name)。

私はJibxを見てきましたが、それは非常に複雑に見え、私がやりたいことの完全な例は提供されていません。

Castroは(マッピングファイルを使用して)私が望むことを実行できるようですが、他に可能な解決策があるかどうか疑問に思います。(おそらく、マッピングファイルをスキップして、注釈ですべてを指定できるようになります)。

ありがとう

4

4 に答える 4

5

EclipseLink JAXB(MOXy)を使用すると、探しているパスベースのマッピングを実行できます。

@XmlRootElement 
class Animal 
{ 
 @XmlPath("standardName/Name/text()")
 private String name; 

 @XmlPath("standardVersion/VersionIdentifier/text()");
 private String versionIdentifier; 
} 

詳細については、以下を参照してください。

EclipseLinkでは、外部構成ファイルを使用してメタデータを指定することもできます。

于 2010-07-07T16:27:51.553 に答える
3

この記事はあなたを助けるかもしれません...それはあなたがxpathを知っていることだけを必要とします http://onjava.com/onjava/2007/09/07/schema-less-java-xml-data-binding-with-vtd-xml.html

于 2009-10-30T19:53:22.543 に答える
3

JakartaCommonsDigesterはあなたが望むことをするはずです。

または、XPathを使用してXMLから要素を取得する変換クラスを作成することをお勧めします。

于 2009-10-30T19:54:20.900 に答える
2

特にアノテーションよりもファイルのマッピングを好むため、JiBXは最高のもの(JAXB、Castor、XMLBeansなど)だと思います。確かにそれはまともな学習曲線を持っていますが、ウェブサイトにはたくさんの良い例があります。チュートリアルを見逃したに違いありません。

一方向(XML-> POJO)のみを使用する場合は、Digesterを使用できます。

サイドコメント:注釈よりもファイルのマッピングを好むのは、注釈が次の理由からです。

  • コードを乱雑にする(特に複数の製品の注釈を使用する場合)
  • 懸念事項の混合(ドメイン層のXML、データベースなど)
  • 単一のXML(またはデータベース、Webサービスなど)表現にのみバインドできます
于 2009-10-30T19:52:44.243 に答える