java - 基于给定 XSD 文件将 Java 对象转换为 XML 的问题
问题描述
我正在 DSpace 5.2 中生成自定义 XML 导出。要导出为 XML 文件的项目具有元数据值数组。这些值必须出现在 XML 文件中,因为给定的 XSD 文件定义了它们的层次结构。我将基于 XSD 顺序的值添加到 XML 中,但某些 XML 标记的顺序与插入顺序不同。
更多细节
我使用的方法是,首先,将元数据值数组移动到地图中。映射的键是元数据字段名称。然后,基于 XSD,我从地图中获取适当的值并生成如下 XML 元素:
import org.dspace.content.Metadatum;
import org.w3c.dom.Element;
import org.w3c.dom.Document;
public class DSpaceXML implements Serializable {
// A member variable
private Document doc;
// A DSpace built-in function used to export an item to an XML
public final void addItem(Item item) throws Exception {
// Initialize this.doc
Element rootElement = doc.createElement("root");
Element higherElement = doc.createElement("higher-element");
Element lowerElement = doc.createElement("lower-element");
insertMetadataAsChildOfElement(higherElement, "child-of-higher", "dc.childOfHigher");
rootElement.appendChild(higherElement);
insertMetadataAsChildOfElement(lowerElement, "child-of-lower", "dc.childOfLower");
rootElement.appendChild(lowerElement);
// stuff to generate other elements of the XML
}
private void insertMetadataAsChildOfElement(Element parentElement, String childElementName,
String key) {
Element childElement;
<Metadatum> metadatumList = (<Metadatum>) metadataMap.get(key);
childElement = createElement(childElementName, metadatum.value);
parentElement.appendChild(childElement);
}
private Element createElement(String name, String value) {
Element el = doc.createElement(name);
el.appendChild(doc.createTextNode(value));
return el;
}
}
我期望这样的 XML:
<root>
<higher-element>
<child-of-higher>Value1</child-of-higher>
</higher-element>
<lower-element>
<child-of-lower>Value2</child-of-lower>
</lower-element>
<another-element-1/>
....
<another-element-n/>
</root>
我得到的是这样的(<lower-element>
之前<higher-element>
):
<root>
<lower-element>
<child-of-lower>Value2</child-of-lower>
</lower-element>
<another-element-1/>
....
<another-element-k/>
<higher-element>
<child-of-higher>Value1</child-of-higher>
</higher-element>
<another-element-k-plus-1/>
....
<another-element-n/>
</root>
我无法弄清楚为什么rootElement.appendChild(higherElement)
在之前调用时会发生这种情况rootElement.appendChild(lowerElement)
。另外,如果有人让我知道我的方法是否是从 XSD 生成 XML 的最佳方法,我将不胜感激。
解决方案
我发现我的代码中有一个错误。由于检查了很多元数据值,行后很多行rootElement.appendChild(lowerElement)
,我有一行rootElement.appendChild(higherElement)
,所以它覆盖了以前的 XML 元素层次结构。结果<higher-element>
出现了之后<lower-element>
。但是关于我的问题的第二部分,如果有人能告诉我关于 DSpace 5 限制的基于 XSD 生成 XML 的最佳实践,我会很高兴。
推荐阅读
- c# - matchtemplate openCv2 python不匹配类似的样子
- outlook - 自动订阅 iCalendar (RFC5545) 提要
- xml - RSS 提要导入所有 youtube 频道视频
- c - C - 从文件末尾读取意外的随机字符
- mysql - Laravel - 在刀片中显示多个图像
- generics - Kotlin 泛型函数
- python - 难以在两列(股票代码和日期)上合并两个数据框
- azure - 更新 Azure DevOps 构建文件
- html - 在我的容器中哪里可以找到“404 Not Found”文件?
- html - 从 Angular Google Maps 路由到另一个组件