Использование этого XML
<!DOCTYPE ADI SYSTEM "ADI.DTD">
<ADI>
<Asset>
<Metadata>
<AMS Asset_Class="title" Asset_ID="HSHT2344862006150001" Asset_Name="HSHT2344862006150001_ALON_HD" Creation_Date="2020-07-07" Description="Alone-title" Product="SVOD" Verb="" Version_Major="1" Version_Minor="0"/>
<App_Data App="MOD" Name="Type" Value="title"/>
<App_Data App="MOD" Name="Title" Value="Alone S7 Ep02 HD"/>
<App_Data App="MOD" Name="Title_Brief" Value="Alone S7 Ep02 HD"/>
<App_Data App="MOD" Name="Category" Value="History/Alone"/>
<App_Data App="MOD" Name="Category" Value="TV Shows/History/Alone"/>
</Metadata>
</Asset>
</ADI>
Я пытаюсь выполнить три вещи в преобразовании XSLT.
- Возьмите одно из значений категории в App_Data и извлеките строку после последней /
- Замените значения Title и Title_Brief полученной строкой.
- Удалите строки категории
Я смог изменить строки категории до строки, которую я хочу заменить в значениях Title и Title_Brief, используя совет из этого поста, однако мой результат заменяет только обе строки категории.
Это мой XSLT
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output encoding="UTF-8" doctype-system="ADI.DTD" method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template name="substring-after-last">
<xsl:param name="string"/>
<xsl:param name="char"/>
<xsl:choose>
<xsl:when test="contains($string, $char)">
<xsl:call-template name="substring-after-last">
<xsl:with-param name="string" select="substring-after($string, $char)"/>
<xsl:with-param name="char" select="$char"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="/ADI/Asset/Metadata/App_Data[@Name='Category']">
<xsl:call-template name="substring-after-last">
<xsl:with-param name="string" select="@Value"/>
<xsl:with-param name="char" select="'/'"/>
</xsl:call-template>
</xsl:template>
</xsl:transform>
Результат
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ADI
SYSTEM "ADI.DTD">
<ADI>
<Asset>
<Metadata>
<AMS Asset_Class="title"
Asset_ID="HSHT2344862006150001"
Asset_Name="HSHT2344862006150001_ALON_HD"
Creation_Date="2020-07-07"
Description="Alone-title"
Product="SVOD"
Verb=""
Version_Major="1"
Version_Minor="0"/>
<App_Data App="MOD" Name="Type" Value="title"/>
<App_Data App="MOD" Name="Title" Value="Alone S7 Ep02 HD"/>
<App_Data App="MOD" Name="Title_Brief" Value="Alone S7 Ep02 HD"/>
Alone
Alone
</Metadata>
</Asset>
</ADI>