У меня небольшая проблема с отображением XSLT.
Я получил файл XML в качестве входных данных со следующими данными:
<?xml version="1.0" encoding="UTF-8"?>
<Request>
<Query>
<Parameter name="staat">OESTERREICH</Parameter>
</Query>
</Request>
Я пытаюсь получить состояние и установите специальный символ для OE, UE, AE и SS.
Специальные символы:
OE = Ö
UE = Ü
AE = Ä
SS = ẞ
Я пробовал следующий XSLT Script / Mapping: '
<?xml version="1.0" encoding="UTF-8"?><?xe.source ../TemporaryFiles/Test_XML_1.xml#Request?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output media-type="text/xml" method="xml"></xsl:output>
<xsl:template match="/">
<root>
<first_two_letters>
<xsl:value-of select="substring(upper-case(/Request/Query/Parameter[@name='staat']),1,2)"></xsl:value-of>
</first_two_letters>
<xsl:choose>
<xsl:when test="substring(/Request/Query/Parameter[@name='staat'],1,2)='OE'">
<xsl:value-of select="concat(substring(replace(/Request/Query/Parameter[@name='staat2'], 'OE', 'Ö'),1,2), substring(replace(replace(replace(lower-case(/Request/Query/Parameter[@name='staat2']), 'ae', 'ä'), 'oe', 'ö'), 'ue', 'ü'),3))"></xsl:value-of>
</xsl:when>
<xsl:when test="substring(/Request/Query/Parameter[@name='staat'],1,2)='AE'">
<xsl:value-of select="concat(substring(replace(/Request/Query/Parameter[@name='staat2'], 'AE', ''),1,2), substring(replace(replace(replace(lower-case(/Request/Query/Parameter[@name='staat2']), 'ae', 'ä'), 'oe', 'ö'), 'ue', 'ü'),3))"></xsl:value-of>
</xsl:when>
<xsl:when test="substring(/Request/Query/Parameter[@name='staat'],1,2)='UE'">
<xsl:value-of select="concat(substring(replace(/Request/Query/Parameter[@name='staat2'], 'UE', 'Ü'),1,2), substring(replace(replace(replace(lower-case(/Request/Query/Parameter[@name='staat2']), 'ae', 'ä'), 'oe', 'ö'), 'ue', 'ü'),3))"></xsl:value-of>
</xsl:when>
<xsl:when test="substring(/Request/Query/Parameter[@name='staat'],1,2)='SS'">
<xsl:value-of select="concat(substring(replace(/Request/Query/Parameter[@name='staat2'], 'SS', 'ẞ'),1,2), substring(replace(replace(replace(lower-case(/Request/Query/Parameter[@name='staat2']), 'ae', 'ä'), 'oe', 'ö'), 'ss', 'ß'),3))"></xsl:value-of>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(substring(/Request/Query/Parameter[@name='staat2'],1,1), substring(replace(replace(replace(lower-case(/Request/Query/Parameter[@name='staat2']), 'ae', 'ä'), 'oe', 'ö'), 'ue', 'ü'),2))"></xsl:value-of>
</xsl:otherwise>
</xsl:choose>
</root>
</xsl:template>
</xsl:stylesheet>
Скрипт работает так хорошо, но результат:
<root>
<first_two_letters>OE</first_two_letters>
</root>
То, что я действительно ожидал от своего вывода, это:
<root>
<first_two_letters>OE</first_two_letters>
Österreich
</root>
--- РЕДАКТИРОВАТЬ: - -
После небольшой справочной формы @Boldewyn в командах, вот рабочий код:
<?xml version="1.0" encoding="UTF-8"?><?xe.source ../TemporaryFiles/Test_XML_1.xml#Request?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output media-type="text/xml" method="xml"></xsl:output>
<xsl:template match="/">
<root>
<first_two_letters>
<xsl:value-of select="substring(upper-case(/Request/Query/Parameter[@name='staat']),1,2)"></xsl:value-of>
</first_two_letters>
<xsl:choose>
<xsl:when test="substring(/Request/Query/Parameter[@name='staat'],1,2)='OE'">
<xsl:value-of select="concat(substring(replace(/Request/Query/Parameter[@name='staat'], 'OE', 'Ö'),1,1), substring(replace(replace(replace(lower-case(/Request/Query/Parameter[@name='staat']), 'ae', 'ä'), 'oe', 'ö'), 'ue', 'ü'),2))"></xsl:value-of>
</xsl:when>
<xsl:when test="substring(/Request/Query/Parameter[@name='staat'],1,2)='AE'">
<xsl:value-of select="concat(substring(replace(/Request/Query/Parameter[@name='staat'], 'AE', ''),1,1), substring(replace(replace(replace(lower-case(/Request/Query/Parameter[@name='staat']), 'ae', 'ä'), 'oe', 'ö'), 'ue', 'ü'),2))"></xsl:value-of>
</xsl:when>
<xsl:when test="substring(/Request/Query/Parameter[@name='staat'],1,2)='UE'">
<xsl:value-of select="concat(substring(replace(/Request/Query/Parameter[@name='staat'], 'UE', 'Ü'),1,1), substring(replace(replace(replace(lower-case(/Request/Query/Parameter[@name='staat']), 'ae', 'ä'), 'oe', 'ö'), 'ue', 'ü'),2))"></xsl:value-of>
</xsl:when>
<xsl:when test="substring(/Request/Query/Parameter[@name='staat'],1,2)='SS'">
<xsl:value-of select="concat(substring(replace(/Request/Query/Parameter[@name='staat'], 'SS', 'ẞ'),1,1), substring(replace(replace(replace(lower-case(/Request/Query/Parameter[@name='staat']), 'ae', 'ä'), 'oe', 'ö'), 'ue', 'ü'),2))"></xsl:value-of>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(substring(/Request/Query/Parameter[@name='staat'],1,1), substring(replace(replace(replace(lower-case(/Request/Query/Parameter[@name='staat']), 'ae', 'ä'), 'oe', 'ö'), 'ue', 'ü'),2))"></xsl:value-of>
</xsl:otherwise>
</xsl:choose>
</root>
</xsl:template>
</xsl:stylesheet>
Но теперь я решил проблему, как сказано в комментариях:
Israel = Isräl.
[2020-08-06 16:26]: Я имею в виду, что это некоторые исключения, такие как Израиль или Литва, где специальные символы не должны действовать.
Как я могу решить эту проблему сейчас?