372.5. 名前空間のマッピング


XML には、要素と属性を完全に修飾する名前空間があります。JSON はそうではありません。XML-JSON 変換を実行するときは、これを考慮する必要があります。

このギャップを埋めるために、Json-lib には、アンマーシャリング (つまり、JSON から XML への変換) 中に XML 出力要素への接頭辞と名前空間 URI の形式でバインド名前空間宣言を行うオプションがあります。たとえば、次の JSON 文字列を指定します。

{ "pref1:a": "value1", "pref2:b": "value2" }

Json-lib に、要素 pref1:a および pref2:b の名前空間宣言をバインドに出力し、接頭辞 pref1 および pref2 を特定の名前空間 URI に出力するように問えます。

この機能を使用するには、単純に XmlJsonDataFormat.NamespacesPerElementMapping オブジェクトを作成し、それらを namespaceMappings オプション (List) に追加します。

XmlJsonDataFormat.NamespacesPerElementMapping は、要素名と 接頭辞 ⇒ 名前空間 URI のマップを保持します。複数の接頭辞と名前空間 URI のマッピングを容易にするために、NamespacesPerElementMapping(String element, String pipeSeparatedMappings) コンストラクターは、次の方法で [prefix, namespaceURI] ペアの文字列ベースのパイプ区切りシーケンスを取得します: |ns2|http://camel.apache.org/personalData|ns3|http://camel.apache.org/personalData2| .

デフォルトの名前空間を定義するには、対応するキーフィールドを空のままにします: |ns1|http://camel.apache.org/test1||http://camel.apache.org/default| .

名前空間宣言を要素名 = 空の文字列にバインドすると、それらの名前空間がルート要素にアタッチされます。

完全なコードは次のようになります。

XmlJsonDataFormat namespacesFormat = new XmlJsonDataFormat();
List<XmlJsonDataFormat.NamespacesPerElementMapping> namespaces = new ArrayList<XmlJsonDataFormat.NamespacesPerElementMapping>();
namespaces.add(new XmlJsonDataFormat.
                       NamespacesPerElementMapping("", "|ns1|http://camel.apache.org/test1||http://camel.apache.org/default|"));
namespaces.add(new XmlJsonDataFormat.
                       NamespacesPerElementMapping("surname", "|ns2|http://camel.apache.org/personalData|" +
                           "ns3|http://camel.apache.org/personalData2|"));
namespacesFormat.setNamespaceMappings(namespaces);
namespacesFormat.setRootElement("person");

そして、Spring DSL でも同じことが実現できます。

372.5.1. 例

次の JSON 文字列で上記の Java スニペットの名前空間バインディングを使用します。

{ "name": "Raul", "surname": "Kripalani", "f": true, "g": null}

 

次の XML が生成されます。

<person xmlns="http://camel.apache.org/default" xmlns:ns1="http://camel.apache.org/test1">
    <f>true</f>
    <g null="true"/>
    <name>Raul</name>
    <surname xmlns:ns2="http://camel.apache.org/personalData" xmlns:ns3="http://camel.apache.org/personalData2">Kripalani</surname>
</person>

JSON 仕様では、JSON オブジェクトが次のように定義されていることに注意してください。

オブジェクトは、名前と値のペアの順序付けられていないセットです。[…​]。

そのため、出力 XML では要素の順序が異なります。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.