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负责此行为。任何提示如何使它保留重复的namepspace?
感谢
库尔特
答案 0 :(得分:0)
您的代码中缺少某些内容:final static String ROOT_NAME
的声明未显示,初始化后未使用Element xml
。
如果 ROOT_NAME
在其他地方使用"myxml"
进行初始化,则问题的解决方案是,您只是不添加xml
元素您的文档,结果看起来像,就像那样。