Заменить данные в xml файле из внешнего файла
Всем привет. Может кто подскажет, возможно ли создать файл xslt-3 так чтобы данные в xml файле изминялись беря данные из внешнего файла(поиск и замена)? Например есть xml файл в нем есть переменная obrabotki1 в которой есть название бумаги которая постоянно миняется и видов много, можно ли сделать так чтобы данные брались из внешнего файла? например: во внешнем файле xml в нем в каждой строке набрано имя бумаги и через тильду на что изменять: ART_150 ~ Art150_320x465, ART_170 ~ Art170_320x465. И так весь список.
Оригинальный файл в которм нужно изменять переменную
<zakazy>
<params KodProverki=""
obrabotki1="ART_150"
obrabotki1="ART_170"
/>
</zakazy>
Пример файла в которм нужно искать и встявлять зачения в оригинальный файл
ART_150~Art150_320x465
ART_170~Art170_320x465
Ответы (1 шт):
XSLT 3.0 представил понятие maps.
Это именно то, что вам нужно.
$find_and_replace переменная держит map: пары ключ/значение (поиск и замена), сколько их необходимо.
Исходный XML
<?xml version="1.0" encoding="UTF-8"?>
<zakazy>
<params KodProverki="" obrabotki1Name="Жесткий картон, 350 гр." obrabotki1="KREATO_350_B3"/>
</zakazy>
XSLT 3.0
<?xml version="1.0"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" expand-text="yes" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:map="http://www.w3.org/2005/xpath-functions/map">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:variable name="find_and_replace" as="map(xs:string, xs:string)">
<xsl:map>
<xsl:map-entry key="'Жесткий картон, 350 гр.'" select="'Картон 350 гр.'"/>
<xsl:map-entry key="'KREATO_350_B3'" select="'Креато 350 гр.'"/>
<!--Добавьте столько пар ключ/значение, сколько необходимо-->
</xsl:map>
</xsl:variable>
<xsl:template match="@*[.=map:keys($find_and_replace)]">
<xsl:attribute name="{local-name()}" select="map:get($find_and_replace, .)"/>
</xsl:template>
</xsl:stylesheet>
Результат
<?xml version='1.0' encoding='utf-8' ?>
<zakazy>
<params KodProverki="" obrabotki1Name="Картон 350 гр." obrabotki1="Креато 350 гр."/>
</zakazy>