У меня есть XML, с несколькими узламиперебор результатов с использованием MarkLogic Java клиентом API
Выписали параметры запроса с параметром и сохранить его в базу данных
<search:options xmlns:search="http://marklogic.com/appservices/search">
<search:constraint name="extValue">
<search:value>
<search:element ns="urn:hl7-org:v2xml" name="CX.1" />
</search:value>
</search:constraint>
<search:extract-document-data xmlns="urn:hl7-org:v2xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hl7-org:v2xml ADT_A01.xsd">
<search:extract-path>/ADT_A01/PID/PID.3/CX.4/HD.1</search:extract-path>
<search:extract-path>/ADT_A01/PV1/PV1.7/XCN.2/FN.1</search:extract-path>
<search:extract-path>/ADT_A01/PV1/PV1.7/XCN.3</search:extract-path>
<search:extract-path>/ADT_A01/PV1/PV1.4/CWE.1</search:extract-path>
</search:extract-document-data>
</search:options>
извлекаемых результатов
DatabaseClient client = factory.getSuperMLConnection();
QueryManager queryMgr = client.newQueryManager();
//used the query options above which is saved to DB with name v2searchQueryOpts
StructuredQueryBuilder qb = new StructuredQueryBuilder("v2searchQueryOpts");
//this is one of the element value in the xml
StructuredQueryDefinition querydef =
qb.and(qb.valueConstraint("extValue", "1.32022.1.10.2"));
SearchHandle resultsHandle = queryMgr.search(querydef, new SearchHandle());
MatchDocumentSummary[] summaries = resultsHandle.getMatchResults();
// here is where i am concerned.
for (MatchDocumentSummary summary : summaries) {
ExtractedResult extracted = summary.getExtracted();
if (Format.XML == summary.getFormat()) {
Document facility = extracted.next().getAs(Document.class);
Document status = extracted.next().getAs(Document.class);
Document physicianFirstName = extracted.next().getAs(Document.class);
Document physicianLastName = extracted.next().getAs(Document.class);
System.out.println("status is :: " + status.getFirstChild().getTextContent());
System.out.println("facility is :: " + facility.getFirstChild().getTextContent());
System.out.println("physicianFirstName is :: " + physicianFirstName.getFirstChild().getTextContent());
System.out.println("physicianLastName is :: " + physicianLastName.getFirstChild().getTextContent());
}
}
}
В результате из базы данных был извлечен контент ниже
<search:extracted>
<HD.1 xmlns="urn:hl7-org:v2xml">ABC</HD.1>
<CWE.1 xmlns="urn:hl7-org:v2xml">E</CWE.1>
<FN.1 xmlns="urn:hl7-org:v2xml">Sri</FN.1>
<XCN.3 xmlns="urn:hl7-org:v2xml">N</XCN.3>
</search:extracted>
Моя цель - загрузить и заполнить java POJO. Есть ли какой-либо другой способ, я могу напрямую отобразить свой результат в POJO?
Проблема заключается в том, что я извлекаю данные из нескольких xpaths xml. Так что я не могу напрямую сопоставить pojo с xml. и я не вижу каких-либо примеров в тех ссылках, где я могу преобразовать объект ExtractedResult в POJO или извлечь ответ на результат и преобразовать его в POJO – venkata
. Одной из альтернативных вариантов использования будет использование JAXB для сериализации вашего POJO, чтобы узнать, что XML JAXB может принимать как вход. Затем напишите преобразование из исходного документа в XML-вход JAXB и установите его на сервере. На клиенте вы можете использовать JAXBHandle для чтения нескольких документов для запроса, преобразования документов на сервере. – ehennum
Чтобы подробно описать мой сценарий ... У меня есть исходный XML, который сохраняется в одном из фоновых процессов. Теперь мне нужно получить некоторые значения элементов с помощью переводов XPath из Source, Скажите, что я извлекаю 5 значений из 20 элементов в sourceXML и покажу их в пользовательском интерфейсе. Позже, если бизнес попросит добавить еще одно поле к извлечению и сделать 6 значений, отображаемых в пользовательском интерфейсе, мне нужно будет добавить это. Я понимаю, что вышеупомянутое решение не будет масштабируемо для этого сценария. Если мне что-то не хватает, было бы очень полезно, если вы сможете подробно описать подход к дизайну, который я должен принять. – venkata