#xslt #xslt-2.0
Вопрос:
У меня есть xml-файл с двумя символами альфа-кода, которые необходимо преобразовать в полное название страны. Например, DE должна стать Германией. Я понимаю, что шаблоны xslt можно использовать для сохранения списка в xslt для извлечения соответствующих имен, однако я не доволен этим дизайном и ищу функцию xslt (или что-то подобное), которая позволит избежать любого дальнейшего обслуживания отображения. пожалуйста, дайте мне знать ваши мысли по этому поводу. Спасибо.
Комментарии:
1. Вы можете поместить список сопоставлений в отдельный XML — документ и искать оттуда.
2. к сожалению, я не могу добавить автономный xml на сервер, поэтому я ищу что-то вроде rest api. спасибо за предложение.
Ответ №1:
Возможно, вызовите веб-службу, например, с помощью XSLT 3 вы можете обработать JSON, возвращенный из большинства API REST
<xsl:template match="code">
<country>{json-doc('https://restcountries.com/v2/alpha/' || .)?name}</country>
</xsl:template>
Для XSLT 2 вы можете использовать службу, возвращающую формат XML, например
<xsl:template match="code">
<country>
<xsl:value-of
select="doc(concat('https://api.worldbank.org/v2/country/', .))/countries/country/name"
xpath-default-namespace="http://www.worldbank.org"/>
</country>
</xsl:template>
Комментарии:
1. Спасибо @martin honnen, но, к сожалению, на данный момент я не могу использовать xslt 3 из-за другой зависимости. Знаете ли вы о какой-либо версии решения 2.0?
2. @Судеш, если вы хотите использовать XSLT 2 или 3 действительно не имеет значения, пока у вас есть веб-сервис, вы можете получить доступ и это дает вам формате, вы можете процесса, сначала я загуглила возвращает JSON, поэтому я использовал код XSLT/XPath на 3 характеристика для обработки, что JSON, но я думаю, что вы можете найти другую службу, которая возвращает XML, вы можете прочитать в XSLT/XPath на 2 с
doc
функцией, а затем выберите атрибут или элемент в возвращенном XML, который имеет название с XPath (и в XSLT, напримерxsl:value-of select="doc(concat('http://example.com/country/', .))//name"/>
. Но ищите такую услугу сами.