jdom删除重复的名称空间声明(xmloutputter)

时间:2011-03-29 08:38:45

标签: java xml jdom

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?

感谢

库尔特

1 个答案:

答案 0 :(得分:0)

您的代码中缺少某些内容:final static String ROOT_NAME的声明未显示,初始化后未使用Element xml

如果 ROOT_NAME在其他地方使用"myxml"进行初始化,则问题的解决方案是,您只是不添加xml元素您的文档,结果看起来像,就像那样。