2012-12-06 2 views
0

Как заменить узел в MarkLogic для определенного атрибута? Например, как показано ниже:Замена узла специального атрибута

<chapters> 
<title id="primary">first primary content</title> 
<title id="primary">second primary content</title> 
<title id="secondary">this is amy middle content</title> 
<title id="terciary">this is amy last content</title> 
</chapters> 

Я хочу, чтобы, как показано ниже:

<chapters> 
<title id="primary">third primary content</title> 
<title id="secondary">this is amy middle content</title> 
<title id="terciary">this is amy last content</title> 
</chapters> 

Я имею в виду предположим A.xml файл, сохраненный в сервере базы данных MarkLogic, которые содержат данные, такие как bleow:

<chaptermetadata> 
<chapters> 
<title id="primary">first content</title> 
<title id="primary">second content</title> 
<title id="secondary">This is middle content</title> 
<title id="terciary">This is last content</title> 
</chapters> 
<chapters> 
<title id="primary">fouth content</title> 
<title id="primary">fifth content</title> 
<title id="primary">sixth content</title> 
<title id="secondary">This is new content</title> 
<title id="terciary">This is old content</title> 
</chapters> 
<chaptermetadata> 

Теперь я хотите заменить узел во всем элементе title, который содержит атрибут @id='primary' во всех главах, как показано ниже:

<chaptermetadata> 
<chapters> 
<title id="primary">common content</title> 
<title id="secondary">This is middle content</title> 
<title id="terciary">This is last content</title> 
</chapters> 
<chapters> 
<title id="primary">common content</title> 
<title id="secondary">This is new content</title> 
<title id="terciary">This is old content</title> 
</chapters> 
<chaptermetadata> 
+1

трудно понять, какое преобразование вы запрашиваете, учитывая разницу между двумя кодовыми блоками –

ответ

0

Если вы только начинаете с XQuery и MarkLogic, http://developer.marklogic.com/learn/technical-overview и http://developer.marklogic.com/learn могут помочь.

Лучший способ изменения элементов и атрибутов зависит от контекста, который вы не предоставили. Я полагаю, первый вопрос: «Как выбрать узлы по атрибуту?» Простой бит XPath делает это. Для всех разделов в базе данных:

/chapters/title[@id eq $id] 

... или по отношению к ранее выбранной последовательности элементов (глава) *

$chapters/title[@id eq $id] 

Если это документ базы данных, вы можете взять его оттуда с функциями http://docs.marklogic.com/xdmp:node-replace и http://docs.marklogic.com/xdmp:node-delete. Если узлы находятся только в памяти, см. http://docs.marklogic.com/guide/app-dev/typeswitch для руководства и примеры использования переключателя XQuery или XSLT. В http://developer.marklogic.com/blog/tired-of-typeswitch есть еще примеры и сравнение typeswitch и XSLT.

Смежные вопросы