У меня есть требование преобразовать XML-документ в файл тега InDesign.Теги Indesign не имеют конечных тегов.Поэтому я делаю рекурсивные замены существующих тегов элементов и некоторые преобразования в данных с приемлемыми в дизайне соглашениями по стилю.На последнем этапе я конвертирую документ в строку с помощью функции xdmp: quote ().Однако, поскольку теги Indesign объединяются в виде строк с данными, я получил следующий вывод.Позже я удалю элементы конечного тега и пространства имен, используя функцию замены
Примечание. Я преобразую в строку, поскольку мне нужно создать простой текстовый файл.Две вещи, которые мне не терпится узнать, почему xdmp: quote не рассматривает строку «как есть» и как мне решить это решение.Любые мысли или предложения будут действительно полезны.
Токовый выход
<CharStyle:Italic xmlns:CharStyle="http://www.Charstyle.indesign.com">
funxtx com <CharStyle:>Jan 15 2010 </CharStyle:Italic>
Ожидаемый результат:
<CharStyle:Italic xmlns:CharStyle="http://www.Charstyle.indesign.com">
funxtx com <CharStyle:>Jan 15 2010 </CharStyle:Italic>
Код:
declare namespace CharStyle = "http://www.Charstyle.indesign.com";
declare namespace cPosition = "http://www.cPosition.indesign.com";
let $book := <Book>
<Author>Priscilla </Author>
<Title>Xquery </Title>
<Source>funxtx com Jan 15 2010</Source>
<year>1990</year>
<release-date>2018-01-01</release-date>
</Book>
let $transformed-book :=
cts:element-walk(
$book,
(xs:QName("Source"),xs:QName("Title"),
xs:QName("year"),xs:QName("release-date")
),
(
if(fn:local-name($cts:node) = "Source")then
let $Source := xdmp:quote($cts:node/text())
let $transformed-text:=
if(fn:matches($Source,"(.*\s*?)(\w{3}\s*\d{2}\s*\d{4})"))then
let $date-transform:= fn:replace($Source,"(.*\s*?)(\w{3}\s*\d{2}\s*\d{4})","$1<CharStyle:>$2")
return $date-transform
else $cts:node/text()
return element{xs:QName("CharStyle:Italic")}{$transformed-text}
else if(fn:local-name($cts:node) = "year")then element{xs:QName("CharStyle:Italic")}{$cts:node/text()}
else if(fn:local-name($cts:node) = "release-date")then element{xs:QName("cPosition:Superscript")}{fn:concat($cts:node/text(),"<cPosition:>")}
else if (fn:local-name($cts:node) = "Title")then element{xs:QName("cPosition:Subscript")}{fn:concat($cts:node/text(),"<cPosition:>")}
else()
)
)
let $string-doc := xdmp:quote($transformed-book)
return $string-doc