Я пытаюсь, чтобы мой XSLT динамически выбирал имя пользователя на основе имени, переданного в запросе. Таким образом, если имя, переданное в запросе, совпадает с именем в xml-файле, в котором содержится имя пользователя, то будет возвращено соответствующее имя пользователя.
SOAP-запрос:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<int:retrieveProperty>
<RetrievePropertyRequestMsg>
<typ1:RequestUsername>
<typ1:UsernameLine>JOE</typ1:UsernameLine>
</typ1:RequestUsername>
<usernameinfo>
<property>
<address1>222 Main St</address1>
<address2></address2>
<city>Springfield</city>
<state>CO</state>
<zipcode>12345</zipcode>
</property>
</usernameinfo>
</RetrievePropertyRequestMsg>
</int:retrieveProperty>
</soapenv:Body>
</soapenv:Envelope>
XML-файл, содержащий имя пользователя:
<Credentials>
<NAME id="JOE">
<Username>Joe</Username>
</NAME>
<NAME id="SEAN">
<Username>Sean</Username>
</NAME>
</Credentials>
XSLT (что у меня есть.):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="soapenv:Envelope/soapenv:Body/int:retrieveProperty/
RetrievePropertyRequestMsg/usernameinfo"/>
</xsl:template>
<xsl:template match="usernameinfo">
<xsl:copy copy-namespaces="no">
<xsl:attribute name="username" select="document('PATH OF FILE ON MY LOCAL')/Credentials/NAME/Username" />
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy copy-namespaces="no">
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Ожидаемый результат:
<usernameinfo username="Joe">
<property>
<address1>222 Main St</address1>
<address2></address2>
<city>Springfield</city>
<state>CO</state>
<zipcode>12345</zipcode>
</property>
</usernameinfo>