С XSLT 3.0 вы можете использовать функцию parse-xml()
, чтобы проанализировать текст как XML, а затем вы можете ввести XPath в структуру, чтобы получить элемент <test>
или его /test/text()
текстовый узел:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<xsl:sequence select="parse-xml(/soap:Envelope/soap:Body/BusinessResponse/BusinessResult)/test"/>
</xsl:template>
</xsl:stylesheet>
С XSLT 1.0 или выше, если ваш контент действительно такой простой, и вам нужен только текстовый узел внутри элемента <test>
, вы можете использовать substring-before()
и substring-after()
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<xsl:value-of
select="substring-before(
substring-after(/soap:Envelope/soap:Body/BusinessResponse/BusinessResult,
'<test>'),
'</test>')" />
</xsl:template>
</xsl:stylesheet>
Если вам нужно уметь выполнять что-то более сложное и вам нужны все возможности XSLT и XPath, то вы можете достичь этого с помощью двух преобразований. Первое преобразование для сериализации text()
BusinessResult
в виде XML с использованием xsl:value-of
с disable-output-escaping="yes"
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<xsl:value-of select="/soap:Envelope/soap:Body/BusinessResponse/BusinessResult" disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>
Который производит:
<?xml version="1.0" encoding="UTF-8"?><test>helloWorld</test>
Если при обработке конверта SOAP вы хотели использовать это с другой структурой XML, вам может потребоваться исключить объявление XML:
substring-after(/soap:Envelope/soap:Body/BusinessResponse/BusinessResult,'?>')
А затем используйте второй XSLT, чтобы выбрать и обработать то, что вы хотите из этого вывода XML