jdom removes duplicate namespace declaration (xmloutputter)

孤街醉人 提交于 2019-12-23 05:51:53

问题


jdom seems to remove duplicate namespace declarations. This is a problem when a XML document is embedded into another XML structure, such as for example in the OAI-PHM (open archive initiative). This can be a problem when the surrounding xml is only a container and the embedded document gets extracted later.

Here is some code. The embedded xml is contained in the string with the same name. It declares the xsi namespace. We construct a jdom container, also declaring the xsi namespace. We parse and embed the string. When we print the whole thing the inner xsi namepsace is gone.

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);

I think that XMLoutputter is responsible for this behaviour. Any hints how I can make it preserve the duplicate namepspace?

thanks

Kurt


回答1:


Something is missing in your code: The declaration of final static String ROOT_NAME is not shown and Element xml ist not used after initialization.

If ROOT_NAME is initialized with "myxml" somewhere else, then the solution to your problem is, that you just don't add the xml element to your document, and the result looks as if you did so.



来源:https://stackoverflow.com/questions/5469878/jdom-removes-duplicate-namespace-declaration-xmloutputter

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!