0

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 对这种行为负责。有什么提示可以让它保留重复的命名空间吗?

谢谢

库尔特

4

1 回答 1

0

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

如果 ROOT_NAME"myxml"其他地方初始化,那么问题的解决方案是,您只是不将xml元素添加到文档中,结果看起来就像 您这样做了。

于 2011-03-29T09:27:45.457 回答