Я создаю пользовательский экспорт XML в DSpace 5.2. Элемент, который должен быть экспортирован как файл 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>
Что яget выглядит так (<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)
. Кроме того, я был бы признателен, если бы кто-нибудь дал мне знать, является ли мой подход наилучшим для генерации XML из XSD.