В XPath 3 или 3.1 у вас есть функция parse-xml
, поэтому с любым процессором XSLT 3 или процессором XSLT 2, предоставляющим вам доступ к функциям XPath 3, вы можете выполнять, например, parse-xml(@datamodel)/y/(a, b)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:mode on-no-match="shallow-skip"/>
<xsl:template match="b[@datamodel]">
<xsl:copy>
<xsl:value-of select="parse-xml(@datamodel)/y/(a, b)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
https://xsltfiddle.liberty -development.net / ncdD7kW использует Saxon 9.8, который реализует XSLT 3, Altova 2017 и более поздние версии, и я думаю, что более ранние версии Saxon (по крайней мере, 9.7) уже поддерживали parse-xml
функция, как я думаю, XmlPrime 4.
Конечно, с другим или более старым процессором XSLT 1 или 2 часто существует запатентованный способ использования функции расширения, даже MSXML 3 или 6, процессор XSLT 1, позволил бы это, если включен msxsl:script
.