XMLデータでは、URI参照によって特定される名前空間情報で、要素名や属性名を修飾することが可能です。
あらかじめ名前空間を利用してXMLデータを設計することで、XMLデータが流通した場合の同一要素名による値の衝突を防ぐことが可能です。
<?xml version="1.0" encoding="Shift_JIS" ?> <book xmlns:fj="urn:fj-touch-communications"> <title>Apcoordinator入門</title> <date>2001/4/1</date> <fj:publisher lang="ja"> <fj:name>富士通タッチコミュニケーションズ</fj:name> <fj:address> <zip>222-0033</zip> <prefecture>神奈川県</prefecture> <city>横浜市</city> </fj:address> <fj:phone>000-111-2222</fj:phone> <fj:phone>000-333-4444</fj:phone> <fj:phone type="tollfree">0120-2222**</fj:phone> <fj:fax type="g4">000-555-6666</fj:fax> </fj:publisher> </book>
名前空間付きXMLデータをXMLデータBeanで操作する方法は次のとおりです。
名前空間情報の登録
XMLデータBeanで名前空間付きXMLデータを操作するためには、あらかじめ名前空間情報を登録する必要があります。
下記の例では、"fj"という名前空間接頭辞に、"urn:fj-touch-communications"という名前空間URIを登録しています。
名前空間の登録に関するAPIの詳細は“APIリファレンス”を参照してください。
XmlDataBean xmlBean = new XmlDataBean(); ... xmlBean.addNamespaceDeclaration("fj","urn:fj-touch-communications");
値の参照
参照したい値をXPathで指定してください。このとき名前空間接頭辞も指定する必要があります。
String text = xmlBean.getText("fj:publisher/fj:name");
ポイント
XMLデータBeanのルート要素から上位の要素で宣言されている名前空間宣言は、XMLデータBeanが自動的に検索します。
名前空間宣言の自動検索は、次のメソッドに対して有効です。
getText(String xpath)
getElement(String xpath)
getNodeSet(String xpath)
getSubBean(String xpath)
注意
XMLデータBeanに名前空間情報が登録されている場合は、登録された情報からのみ名前空間接頭辞を解決し、名前空間宣言の自動検索は行いません。
名前空間宣言の自動検索を行う場合は、XMLデータBeanに名前空間情報を登録しないでください。
値の更新
XPathで指定された値を更新することができます。XPathの指定には、登録済みの名前空間接頭辞を使用してください。
xmlBean.addNamespaceDeclaration("fj","urn:fj-touch-communications") xmlBean.setText("fj:publisher/fj:address/city","川崎市");
名前空間宣言の追加
XMLデータBeanのルート要素に登録されている名前空間情報を、名前空間宣言として追加することができます。
詳細は“APIリファレンス”を参照してください。
元のXMLデータ
<?xml version="1.0" encoding="Shift_JIS" ?> <book> <title>Apcoordinator入門</title> </book>
名前空間宣言の追加
xmlBean.addNamespaceDeclaration("fj","urn:fj-touch-communications") xmlBean.addNamespacesToNode()
名前空間宣言追加後のXMLデータ
<?xml version="1.0" encoding="Shift_JIS" ?> <book xmlns:fj="urn:fj-touch-communications"> <title>Apcoordinator入門</title> </book>