如何将xsi类型值填充为参数?

时间:2013-06-18 04:05:36

标签: xml xslt

以下是我原来的XSL模板。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:n="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:ns1="http://webservice_product/helloworld"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="ns1:sayHello">
  <ns1:sayHello xsi:type="ns698:Product" xmlns:ns698="urn:objects.prodcuts.com">
    <xsl:apply-templates select="@* | node()"/>
  </ns1:sayHello>
</xsl:template>

</xsl:stylesheet>

在上面的xsl中,我想参数化xsi:type =“ns698:Product”的值。如下 -

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:n="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:ns1="http://webservice_product/helloworld"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<xsl:variable name="name" select='"Product"' />

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="ns1:sayHello">
  <ns1:sayHello xsi:type="ns698:$name" xmlns:ns698="urn:objects.prodcuts.com">
    <xsl:apply-templates select="@* | node()"/>
  </ns1:sayHello>
</xsl:template>

</xsl:stylesheet>

但这不起作用。我努力了。

1 个答案:

答案 0 :(得分:0)

尝试:

<ns1:sayHello xsi:type="ns698:{$name}" xmlns:ns698="urn:objects.prodcuts.com">

或者

<xsl:variable name="name" select='"ns698:Product"' />

...

<ns1:sayHello xsi:type="{$name}" xmlns:ns698="urn:objects.prodcuts.com">