jdom は、重複した名前空間宣言を削除するようです。これは、XML ドキュメントが、たとえば OAI-PHM (オープン アーカイブ イニシアチブ) などの別の XML 構造に埋め込まれている場合に問題になります。これは、周囲の xml が単なるコンテナーであり、埋め込まれたドキュメントが後で抽出される場合に問題になる可能性があります。
ここにいくつかのコードがあります。埋め込まれた xml は、同じ名前の文字列に含まれています。xsi 名前空間を宣言します。jdom コンテナーを作成し、xsi 名前空間も宣言します。文字列を解析して埋め込みます。全体を印刷すると、内側の xsi ネームスペースがなくなります。
public static final Namespace OAI_PMH= Namespace.getNamespace( "http://www.openarchives.org/OAI/2.0/");
public static final Namespace XSI = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
public static final String SCHEMA_LOCATION = "http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd";
public static final String ROOT_NAME = "OAI-PMH";
String embeddedxml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <myxml xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\""
+ "http://www.isotc211.org/2005/gmd"
+ " http://www.ngdc.noaa.gov/metadata/published/xsd/schema/gmd/gmd.xsd"
+ " http://www.isotc211.org/2005/gmx"
+ " http://www.ngdc.noaa.gov/metadata/published/xsd/schema/gmx/gmx.xsd\">\""
+ "</myxml>";
// loadstring omitted (parse embeddedxml into jdom)
Element xml = loadString(embeddedxml ,false);
Element root = new Element(ROOT_NAME, OAI_PMH);
root.setAttribute("schemaLocation", SCHEMA_LOCATION, XSI);
// insert embedded xml into container structure
root.addContent(xml);
XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
// will see that the xsi namespace declaration from embeddedxml is gone
out.output(root,System.out);
XMLoutputter がこの動作を担当していると思います。重複した名前空間を保持する方法についてヒントはありますか?
ありがとう
カート