Как найти данный текст в XHTML-файле marklogic, например, clt+f
У меня ниже XHTML файл, сохраненный в marklogic с URI(/54ab8c234f3c8ce1f5c30ddc).
Мне нужно искать в базе данных Marklogic по строке (если это имя тега, имя атрибута или текст в XHTML).
Я могу искать только текст или атрибут. Но не в состоянии искать все одновременно.
Примечание: если я передам строку "SS_Default"(это значение атрибута), он вернет URI marklogic или, если я передам "META" (это имя тега), он должен вернуть соответствующие URI или, если я передам "Narrowed" "(это текст) должен возвращать URI соответствующего файла.
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<meta>
</meta>
<body class="Default">
</body>
</html>
2 ответа
Виды поиска, которые вы пытаетесь выполнить, обычно выполняются не так, как другие, поскольку это разные типы данных. Например, если вы хотите найти "мета" и найти документы, содержащие этот элемент, вы запрашиваете структуру. Вы можете сделать это в MarkLogic с таким запросом:
cts:uris((), (), cts:element-query(xs:QName("meta"), ()))
Когда вы хотите найти "суженный", это просто текст, красивый и простой:
cts:uris((), (), "narrowed by")
Если вы хотите искать в атрибутах, это обычно делается путем указания атрибута, который вы хотите найти:
cts:uris((), (), cts:attribute-value-query(xs:QName("body"), xs:QName("class"), "SS_Default"))
Если вы хотите объединить их, вы можете выполнить запрос или. Я предлагаю просмотреть типы запросов, которые вы планируете выполнить, и посмотреть, можно ли их сегментировать таким образом. Как отмечает mholstege, вы можете загрузить документ в виде текста и иметь возможность искать все как строки, но при этом вы потеряете много значения в структуре, поэтому, вероятно, лучше отступить назад и подумать, действительно ли вам нужно запустить эти запрашивает так же.
При приеме внутрь можно использовать шаблон конверта, создав обертку вокруг исходного документа.
<envelope>
<original>
<html>...</html>
</original>
<plain-text>
put the plain text content of your html here
</plain-text>
</envelope>
Ваш текстовый поиск может быть выполнен только на элементе простого текста, и при возврате полученных документов вы можете вернуть элемент содержимого. Но, как упоминал Дейв, вы теряете ценную информацию. Здесь вы можете найти документацию о способах получения данных https://docs.marklogic.com/guide/ingestion