在运行时使用 xslt 在 xml 文档中搜索
Searching in xml document using xslt at runtime
假设我有一个这样的 WSDL 文件:
<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>
我的 xslt 是这样的:
<xsl:for-each select="definitions/service">
</xsl:for-each>
可以找到wsdl中的所有service
。但是我想找到每个服务的绑定。我该怎么做?
例如在这种情况下,对于服务StockQuoteService
,我需要找到的绑定是这个节点(删除属性中的tns
之后):
<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>
我如何在 xslt 中执行此操作?
你可以试试这个
<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>
假设我有一个这样的 WSDL 文件:
<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>
我的 xslt 是这样的:
<xsl:for-each select="definitions/service">
</xsl:for-each>
可以找到wsdl中的所有service
。但是我想找到每个服务的绑定。我该怎么做?
例如在这种情况下,对于服务StockQuoteService
,我需要找到的绑定是这个节点(删除属性中的tns
之后):
<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>
我如何在 xslt 中执行此操作?
你可以试试这个
<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>