Извините, если я пропустил тривиальный ответ на этот вопрос, но я пытаюсь получить объект StructuredQueryDefinition, который будет искать документы, содержащие определенный тег XML.
Строка поиска XML, которую я мог бы использовать, выглядела бы примерно так:
Но я не уверен, как создать StructuredQueryDefinition с использованием Java API. Я ищу эквивалент, но не вижу его.
StructuredQueryBuilder qb = …
StructuredQueryDefinition def = qb.containerQuery(qb.element("MyTag"), ?whatGoesHere?);
РЕДАКТИРОВАТЬ:
Я нашел уродливый хак, который позволил мне создать свой собственный StructuredQueryDefinition, но это некрасиво. Я надеюсь, что существует более «нестандартный» способ ограничения XML-файлов с заданным тегом, но пока я буду использовать этот класс:
package com.marklogic.client.query;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
/**
* This is a pretty gritty hack. I needed to create a StructuredQueryDefinition that
* would represent the search. (This was needed to find XML files that
* contain a given element).
*
* The StructuredQueryBuilder has a checkQuery method that only allows StructuredQueryDefinition
* objects that are assignable from the AbstractStructuredQuery class. Unfortunatly this
* class is protected so I can't extend it from any class that isn't in the com.marklogic.client.query
* package. Additionally the AbstractStructuredQuery default constructor references the builderOptionsURI
* of its enclosing class StructuredQueryBuilder so I had to first create a class that extended
* the StructuredQueryBuilder and that class define an inner class that extends the AbstractStructuredQuery
* class.
*
* Its not pretty but it does work. I can create a StructuredQueryDefinition to limit to
* document containing a tag using the following
* qb.containerQuery(
* qb.element(tag),
* new com.marklogic.client.query.StructuredQueryBuilderExt().getTrueQueryDefinition()
* );
*/
public class StructuredQueryBuilderExt extends StructuredQueryBuilder {
public TrueQueryDefinition getTrueQueryDefinition() {
return new TrueQueryDefinition();
}
public class TrueQueryDefinition extends AbstractStructuredQuery {
@Override
public void innerSerialize(XMLStreamWriter serializer) throws XMLStreamException {
serializer.writeEmptyElement("true-query");
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ml-files-w