gpt4 book ai didi

java - 基于给定 XSD 文件将 Java 对象转换为 XML 时出现问题

转载 作者:行者123 更新时间:2023-11-30 05:27:54 25 4
gpt4 key购买 nike

我正在 DSpace 5.2 中生成自定义 XML 导出。要导出为 XML 文件的项目具有一组元数据值。这些值必须出现在 XML 文件中,因为给定的 XSD 文件定义了它们的层次结构。我根据 XSD 顺序将值添加到 XML 中,但某些 XML 标记的顺序与插入顺序不同。

更多详细信息

我使用的方法是,首先将元数据值数组移动到 map 中。映射的键是元数据字段名称。然后,根据 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 的最佳实践,我会很高兴。

关于java - 基于给定 XSD 文件将 Java 对象转换为 XML 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58186537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com