Вы не учли пространства имен в вашем XSLT. В вашем XML Header
находится в пространстве имен http://schemas.xmlsoap.org/soap/envelope/
, но ваш XSLT пытается соответствовать Header
без пространства имен.
Вам необходимо объявить пространства имен в вашем XSLT и использовать их в шаблонах совпадений
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsse="http://docs.x.org/wsse/">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="ns0:Header">
<xsl:copy-of select="wsse:Sec"/>
</xsl:template>
<xsl:template match="ns0:Body" />
</xsl:stylesheet>
Обратите внимание, что для XSLT не требуются шаблоны, соответствующие "Кому" и "Действие", поскольку явная копия wsse:Sec
использует этот подход. Тем не менее, вам необходимо создать шаблон, чтобы убедиться, что любой тест в ns0:Body
не выбран.
Другой подход заключается в использовании шаблона идентификации, и тогда у вас будут шаблоны для исключения To
и Action
(и Body
)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsse="http://docs.x.org/wsse/">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ns0:Envelope|ns0:Header">
<xsl:apply-templates />
</xsl:template>
<!-- Exclude these -->
<xsl:template match="ns0:Body|To|Action" />
</xsl:stylesheet>
Обратите внимание, что существует шаблон, соответствующий ns0:Envelope
и ns0:Header
, поскольку, хотя сами эти элементы вам не нужны, вам нужно обработать дочерние узлы.