我找不到一个很好的解释为什么第二个例子在这里有效,但第一个没有:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xsd"
version="2.0">
<xsl:template match="/">
<xsl:value-of select="/wsdl:definitions/wsdl:message[@name = $messageName]"/>
<xsl:value-of select="/wsdl:definitions/wsdl:message/@name[. = $messageName]"/>
</xsl:template>
</xsl:stylesheet>
上下文是在WSDL文档中查找特定的命名消息。我怀疑它与命名空间有关,只是因为XSLT严重阻碍了我,但我不明白为什么?
有人可以为我发光,我不喜欢尝试获得解决方案,因为它不会导致理解。
WSDL的相关部分是:
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="retrieveCustomerYtdResponse">
<part name="parameter"/>
</message>
<message name="retrieveCustomerYtdRequest"/>
</definitions>
答案 0 :(得分:0)
名称空间没有任何问题。两个表达式都是正确的,并产生预期的结果。
假设(至少)指令的上下文模板,使用第一条指令,您尝试使用给定的 @name 打印 wsdl:message 的后代的文本节点。没有任何内容会打印出来,因为该元素中没有文字。
第二条指令将打印 @name 的值。那是对的。