Для поиска данных, индексируемых по правилам индекса поиска XML, текст поискового запроса имеет форму имя-элемента[имя-атрибута='значение-атрибута'].
Этот текст добавляется как поле поиска атрибута в
RAMAssetQueryBuilder.
Результаты до отдельных совпадений XML можно получить через объект результатов
ArtifactSearchResults.
Примеры форматов поиска в данных XML.
- Поиск без элемента: имя-атрибута='attributeValue'
- Поиск нескольких атрибутов элемента: имя-элемента[имя-атрибута-1='значение-атрибута-1'
имя-атрибута-2='значение-атрибута-2']
- Поиск по полному пути: элемент-пути-1/элемент-пути-2[имя-атрибута='значение-атрибута']
- Поиск текста в элементе: имя-элемента[text()='текст']
- Для поиска в документах XML можно использовать символ подстановки: имя-элемента[имя-атрибута='атрибут*']
// Поиск в индексированном содержимом XML
RAMAssetQueryBuilder query = new RAMAssetQueryBuilder(session);
// Включение режима поиска в артефактах
query.setSearchModes(SearchQuery.SEARCH_WITHIN_ARTIFACTS_FLAG);
// Текст поиска в индексе XML в форме имя-элемента[имя-атрибута='значение-атрибута']
String searchText = "wsdl:definitions[targetNamespace='*example*']";
query.addQueryField(query.QUERY_FIELD_ATTRIBUTE, searchText);
// Выполнение поиска
SearchResult result = session.getAssets(query);
// Получение списка ресурсов, соответствующих критериям поиска
AssetSearchResult[] results = result.getAssetSearchResults();
for(int i = 0; i < results.length; i++){
// Получение списка артефактов ресурса, соответствующих критериям поиска
ArtifactSearchResult[] artifactMatches = results[i].getMatchingArtifacts();
for(int j = 0; j < artifactMatches.length; j++){
// Получение для артефакта элементов индекса XML, соответствующих критериям поиска
String[] xmlIndexMatches = artifactMatches[j].getMatches();
for(int k = 0; k < xmlIndexMatches.length; k++){
System.out.println("Match = " + xmlIndexMatches[k]);
}
}
}