2016-04-07 24 views
0

de xslt kullanarak xml belgesinde aranıyor Böyle bir WSDL dosyası var Sağlar ki:zamanında

<definitions> 
    <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> 
     <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
     <operation name="GetLastTradePrice"> 
      <soap:operation soapAction="http://example.com/GetLastTradePrice"/> 
      <input> 
       <soap:body use="literal"/> 
      </input> 
      <output> 
       <soap:body use="literal"/> 
      </output> 
     </operation> 
    </binding> 

    <service name="StockQuoteService"> 
     <documentation>My first service</documentation> 
     <port name="StockQuotePort" binding="tns:StockQuoteBinding"> 
      <soap:address location="http://example.com/stockquote"/> 
     </port> 
    </service> 
</definitions> 

Ben böyle benim xslt:

<xsl:for-each select="definitions/service"> 
</xsl:for-each> 

tüm service bulabilirsiniz wSDL. Ancak her servisin bağlantılarını bulmak istiyorum. Bunu nasıl yapabilirim?

<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> 
      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
      <operation name="GetLastTradePrice"> 
       <soap:operation soapAction="http://example.com/GetLastTradePrice"/> 
       <input> 
        <soap:body use="literal"/> 
       </input> 
       <output> 
        <soap:body use="literal"/> 
       </output> 
      </operation> 
     </binding> 

nasıl XSLT'de yapabilirsiniz: hizmet StockQuoteService, (özelliğinde tns kaldırdıktan sonra) ben bulmalıyız edilir bağlama bu düğüm için bu durumda Örneğin

? , Eşleşmiyor:

+1

bir ciddi problem 'StockQuoteBinding' senin hizmetinde' @ binding' ('TNS' olmadan) olmasıdır deneyebilirsiniz "" unuzun 'ismi '' StockQuoteSoapBinding' değeriyle. Bunu nasıl halledebilirsin? 'Bağlama' önce 'Sabunu' yerleştirin? – zx485

+0

"tns" yi kaldıramıyoruz ve sonra arama yapamıyoruz mu? –

cevap

1

Bu

<xsl:template match="/definitions/service"> 
    <xsl:variable name="this" select="." /> 

    <xsl:copy-of 
     select="/definitions/binding[substring-after($this/port/@binding,':') = 
            concat(substring-before(@name,'Soap'),'Binding')]" /> 
</xsl:template>