Если у вас есть доступ к процессору XSLT 3, например, Saxon 9.8, вы можете использовать функцию parse-xml
, чтобы проанализировать экранированную разметку в узлы XML, а затем преобразовать их так, чтобы
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:mode on-no-match="text-only-copy"/>
<xsl:template match="executeReturn">
<xsl:apply-templates select="parse-xml(.)"/>
</xsl:template>
<xsl:template match="Clients">
<Customers>
<Customer>
<xsl:apply-templates/>
</Customer>
</Customers>
</xsl:template>
<xsl:template match="ClientID">
<CustomerID>
<xsl:apply-templates/>
</CustomerID>
</xsl:template>
</xsl:stylesheet>
преобразует ваш ввод в https://xsltfiddle.liberty -development.net / eiZQaF2 в
<?xml version="1.0" encoding="UTF-8"?>
<Customers>
<Customer>
<CustomerID>C000001</CustomerID>
<CustomerID>C000002</CustomerID>
</Customer>
</Customers>
В более ранних версиях XSLT вам необходимо проверить, предоставляет ли ваш процессор функцию расширения или позволяет вам реализовать одну, или вам нужно написать две таблицы стилей XSLT, где первая выводит экранированную разметку с помощью disable-output-escaping
, а вторая затем преобразует эту выход первого.