Я использую этот скрипт merge.xslt для объединения нескольких разных XML файлы в один. Этот инструмент очень полезен и включает параметр командной строки dontmerge, чтобы определенные элементы XML не объединялись. Проблема в том, что можно указать только один элемент XML, а мне нужно указать несколько элементов XML, которые не следует объединять. Я мог бы просто добавить в сценарий дополнительные параметры командной строки, например dontmerge2, dontmerge3 и т. д., но это не элегантное решение.
Изучая определенные элементы XML, которые нельзя объединять, я понял, что все они относятся к одному и тому же типу схемы XML, а именно:
<xs:element name="doCliCommand" type="cliParametersT">
</xs:element>
<xs:element name="undoCliCommand" type="cliParametersT">
</xs:element>
Итак, вместо того, чтобы использовать dontmerge для doCliCommand и undoCliCommand, я хотел бы иметь возможность сделать что-то вроде dontmergetype=cliParametersT
Соответствующая часть merge.xslt заключается в следующем:
<xslt:param name="dontmerge" />
...
<xslt:when test="$type1='element' and $type2='element' and
local-name($node1)=local-name($node2) and
namespace-uri($node1)=namespace-uri($node2) and
name($node1)!=$dontmerge and name($node2)!=$dontmerge">
Итак, вот вопрос: как мне изменить это конкретное тестовое условие xslt, чтобы иметь возможность проверять тип схемы XML? Я не нашел подходящих функций XPath, XQuery или XSLT для получения типа схемы.
Существует несколько связанный с этим вопрос, где они упоминают, что это невозможно сделать, если не используются расширения Saxon. Я использую SaxonHE9-5-1-3J.