2011-03-29 71 views
0

jdom似乎删除重复的名称空间声明。当XML文档嵌入到另一个XML结构中时,例如在OAI-PHM(开放归档计划)中,这是一个问题。这可能是一个问题,当周围的XML只是一个容器和嵌入式文档被提取后。jdom删除重复的名称空间声明(xmloutputter)

这是一些代码。嵌入的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?

感谢

库尔特

+3

为什么它会成为一个问题?如果名称空间实际上在嵌入式XML中使用,则在提取嵌入式XML时映射将“恢复”。 – 2011-03-29 08:46:15

+0

确实。当元素移动到新文档时,任何XML API都会为您管理名称空间声明。 JDOM在删除重复的定义方面非常正确。 – skaffman 2011-03-29 09:06:56

+0

问题似乎是提取。 AFAIK大多数OAI收获者的行为方式是,他们只是在字符串级别“剪切”嵌入的xml,也就是说,XML不会被解析。因此它不了解XML结构和名称空间。在我的例子中,你会发现将会有一个xsi:schemaLocation = ..如果你从容器结构中删除了嵌入的xml,没有定义xsi。 – user671534 2011-03-29 09:55:27

回答

0

有些东西被省略代码:中final static String ROOT_NAME声明没有显示初始化后Element xml IST不使用。

如果ROOT_NAME"myxml"其他地方进行初始化,则解决您的问题是,你只是xml元素不添加到您的文档,结果看起来仿佛你这样做了。

+0

我忘了将嵌入式xml(xml)添加到容器(root)的代码的重要部分。它现在在那里 – user671534 2011-03-29 09:57:50

相关问题