如何在xsl转换中将多个属性从源映射到目标上的多值属性

时间:2014-09-10 06:59:18

标签: xml web-services xslt wsdl

我必须使用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

1 个答案:

答案 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中显示。