2

そこで、SOAP ドキュメントのボディ内のすべての要素を XSLT を使用して XML に変換 (抽出) しようとしています。これが私のSOAPドキュメントです(完全)

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="dealercode.xsl"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <AuthHeader xmlns="http://www.somedomain.com/">
            <LogonID></LogonID>
            <Password></Password>
        </AuthHeader>
    </soap:Header>
    <soap:Body>
        <getDealerCodeById xmlns="http://www.somedomain.com/">
            <BrokerCode>{ssQuoterBrokerCode(app_id)}</BrokerCode>
            <IDNumber>{dealerCode}</IDNumber>
        </getDealerCodeById>
    </soap:Body>
</soap:Envelope>

そして、これが私の XSLT シートです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<?xml-stylesheet type="text/xsl" href="dealercode2soap.xsl"?>

    <xsl:template match="/*">
<xsl:value-of select="soap:Body/s:getDealerCodeById"
     xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
     xmlns:s="http://somedomainname/" />

</xsl:stylesheet>

しかし、出力は私が望むものではありません。「soap:Body」要素内のコンテンツを提供するだけでなく、SOAPドキュメント全体を解析しているため、「未解決の名前空間プレフィックスsoap」という警告も表示されます

どこが間違っていますか?

編集:別のコードブロックを使用して、なんとか動作させることができました。下記参照

<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns ="http://www.somedomainename.com">

<xsl:template match="/">
    <xsl:apply-templates select="soap:Envelope/soap:Body/*"/>
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

これで、ブラウザに body セクションの内容が出力されます。私が気付いたもう 1 つの最も重要なことは、書式設定はサーバー側で行われたことですが、その時点ではサーバーにアクセスできなかったため、自分のコードが機能しているかどうかわかりませんでした。これは私が探していた望ましい出力です (これは明らかにずっと機能していました。

    <?xml version="1.0" encoding="UTF-8"?>
<getDealerCodeById xmlns="http:///" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <BrokerCode>{ssQuoterBrokerCode(app_id)}</BrokerCode>
   <IDNumber>{dealerCode}</IDNumber>
</getDealerCodeById>
4

2 に答える 2

2

XSLT で名前空間を宣言していないため、 「 Unresolved namespace prefix soap 」に関する警告が表示されます。soap

また、getDealerCodeById要素はhttp://somedomainname/namespace-uri にバインドされています。名前空間プレフィックスを使用していないため、気付いていない可能性があります。 xmlns="http://somedomainname/"

soapXSLT で名前空間と名前空間の両方を宣言し、宣言した名前http://somedomainname/空間プレフィックスを使用するように XPath を調整してください。

<xsl:template match="/*">
    <xsl:value-of select="soap:Body/s:getDealerCodeById"
         xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
         xmlns:s="http://somedomainname/" />
</xsl:template>
于 2013-05-13T13:28:48.250 に答える