jdom 似乎删除了重复的命名空间声明。当 XML 文档嵌入到另一个 XML 结构中时,例如在 OAI-PHM(开放归档倡议)中,这是一个问题。当周围的 xml 只是一个容器并且嵌入的文档稍后被提取时,这可能是一个问题。
这是一些代码。嵌入的 xml 包含在具有相同名称的字符串中。它声明了 xsi 命名空间。我们构造了一个 jdom 容器,同时声明了 xsi 命名空间。我们解析并嵌入字符串。当我们打印整个内容时,内部 xsi namepsace 就消失了。
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 对这种行为负责。有什么提示可以让它保留重复的命名空间吗?
谢谢
库尔特