Я использую Spring Boot и Apache Camel в своем проекте. Архитектура заключается в том, что некоторый XML поступает из входной очереди на уровень Camel, где он преобразуется в другой XML с помощью XSLT, а затем окончательный XML отправляется в выходную очередь. Приходящий XML имеет следующую форму.
<tns:Standalone xmlns:tns = "namespace1">
<tns:name>Test</tns:name>
</tns:Standalone>
и это правильно преобразуется с помощью XSLT. Проблема в моем потоке, tns входящего XML может различаться (скажем, другой XML может поставляться с tns как namespace2). Тогда XSLT терпит неудачу. Поэтому мне нужна логика для дифференциации входящих XML-файлов на основе значений tns, чтобы я мог использовать разные XSLT для обоих сканариев. Не могли бы вы подсказать мне, как я могу различать входные XML-файлы на основе tns?
Не могли бы вы дать мне представление о том, как это сделать?
Нет, если вы не расширите то, что вы хотите сделать в каждом случае.
Я хочу преобразовать сообщение в целевое сообщение и хочу сделать одно и то же преобразование в обоих случаях. В обоих случаях будет отличаться только tns входящего сообщения и ничего больше.




Вот простой пример, показывающий, как можно использовать один XSLT для одинаковой обработки узлов в двух разных пространствах имен:
XSLT 1.0
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
xmlns:ns1 = "namespace1"
xmlns:ns2 = "namespace2"
exclude-result-prefixes = "ns1 ns2">
<xsl:output method = "xml" version = "1.0" encoding = "UTF-8" indent = "yes"/>
<xsl:template match = "/ns1:Standalone | /ns2:Standalone">
<output>
<xsl:value-of select = "ns1:name | ns2:name"/>
</output>
</xsl:template>
</xsl:stylesheet>
Когда эта таблица стилей применяется к одному из следующих входных данных:
XML 1
<tns:Standalone xmlns:tns = "namespace1">
<tns:name>Test</tns:name>
</tns:Standalone>
XML 2
<tns:Standalone xmlns:tns = "namespace2">
<tns:name>Test</tns:name>
</tns:Standalone>
результат будет:
Результат
<?xml version = "1.0" encoding = "UTF-8"?>
<output>Test</output>
Спасибо, это было то, что я искал. Я не знал об условии ИЛИ при проверке в XSLT.
На самом деле | — это оператор объединения, а не ИЛИ.
Если вы хотите, вы можете написать один XSLT, который будет по-разному обрабатывать узлы в разных пространствах имен.