У нас большой рабочий процесс программ, которые анализируют данные в файлы XML.У нас есть около 14 схем, каждая из которых имеет другой корень и состоит из около 60 файлов XSD.Некоторые из схем имеют сходные элементы, но схемы в настоящее время модифицируются еженедельно.
У меня есть этап (написанный на Java), который принимает файл XML (который может соответствовать любой из 14 схем) и считывает список кортежей (xpaths, message) и для каждого элемента флага xpath a flagвставляется под элементом, определенным xpath, содержащим сообщение.
<default:flag issueDateTime="2012-01-10T21:00:09" recipient="lablabla" resolvedIndicator="false" sender="SS" xmlns:default="default">
<default:flagSubject/>
<default:message>
<default:p>This element should be non empty</default:p>
</default:message>
</default:flag>
Мой текущий подход состоял в том, чтобы вставить элемент flag как последний дочерний элемент узла, на который ссылается xpath, который вызывает проблему.В некоторых схемах указанный узел принимает элемент флага в последовательности в порядке, определенном xsd (может быть серединой, первым или последним), поэтому добавление его в качестве последнего элемента делает xml недействительным, когда элемент уже имеет подэлементы из этой последовательности.
Мой вопрос: как добавить элемент в последовательность таким образом, чтобы он соответствовал определенному порядку XSD?
Я сейчас занимаюсь этим
Element flag = rawXmlDoc.createElementNS("default", "default:flag");
xpath = factory.newXPath();
xpath.setNamespaceContext(nsContext);
XPathExpression expr = xpath.compile(xpathText);
Element refNode = (Element)expr.evaluate(rawXmlDoc, XPathConstants.NODE);
if (refNode.getNodeType()==Node.ELEMENT_NODE)
refNode.appendChild(flag);
else
refNode.getParentNode().appendChild(flag);
Я надеюсь получить ответ, используя стандартный интерфейс DOM, не полагаясь на MOXy.