XSLT должен динамически выбирать имя пользователя на основе имени, переданного в запросе - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь, чтобы мой 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...