我必须使用xsl转换从一个wsdl映射到另一个。在我的源码wsdl中我有一个属性有多个值,例如来自sorce wsdl的结果是
<Groups>
<group>Group1</group>
<group>Group2</group>
</Groups>
要在目标wsdl中映射到的属性的类型是:
<xs:complexType name="attributesMultiValued">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0"/>
<xs:element name="values" type="xs:string"
nillable="true" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
我尝试使用简单的for-each,但这并没有得到值。
示例转换代码:
<attributesMultiValued>
<name>
<xsl:text disable-output-escaping="no">Groups</xsl:text>
</name>
<xsl:for-each select="tns:Groups">
<values>
<xsl:value-of select="group"/>
</values>
</xsl:for-each>
</attributesMultiValued>
如何才能获得group
中的所有values
?
答案 0 :(得分:0)
看起来这就是你要做的事情:
<attributesMultiValued>
<name>Groups</name>
<xsl:for-each select="tns:Groups/tns:Group">
<values>
<xsl:value-of select="." />
</values>
</xsl:for-each>
</attributesMultiValued>
更好的方法是使用模板:
<attributesMultiValued>
<name>Groups</name>
<xsl:apply-templates select="tns:Groups/tns:Group" />
</attributesMultiValued>
<!-- A bit further down... -->
<xsl:template match="tns:Group">
<values>
<xsl:value-of select="." />
</values>
</xsl:template>
但是,如果没有更广泛的XML示例(例如,tns:
命名空间来自何处?),我无法确定其中任何一个是您所需要的?它是什么?未在您的示例XML中显示。