使用 <sql:query> 时如何使用 <xsl:attribute> 制作元素

How to make element with <xsl:attribute> when using <sql:query>

我正在使用 saxonee-sql 连接到数据库。如何使输出 xml 文件像这样:

<Partners>
   <Partner type="Supplier">
          <PartnerName>name 1</PartnerName>
          <PartnerDuns>duns 1</PartnerDuns>
   </Partner>
   <Partner type="Buyer">
          <PartnerName>name 2</PartnerName>
          <PartnerDuns>dums 2</PartnerDuns>
   </Partner>
</Partners>

这是 xslt:

 <xsl:variable name="partner"> 
     <sql:query connection="$connection" table="Partner" column="PartnerDuns,PartnerName,type" row-tag="Partner" /> 
</xsl:variable>
 <Partners>
    <xsl:copy-of select="$partner" />
</Partners>

当前输出为

<Partners>
   <Partner>
          <PartnerName>name 1</PartnerName>
          <PartnerDuns>duns 1</PartnerDuns>
          <type>Supplier</type>
   </Partner>
   <Partner>
          <PartnerName>name 2</PartnerName>
          <PartnerDuns>dums 2</PartnerDuns>
          <type>Buyer</type>
   </Partner>
</Partners>

我想你可以简单地转换原始结果,例如

<xsl:template match="Partner/*">
  <xsl:copy-of select="."/>
</xsl:template>

<xsl:template match="Partner/type">
  <xsl:attribute name="{name()}" select="."/>
</xsl:template>

<xsl:template match="Partner">
  <xsl:copy>
    <xsl:apply-templates select="type, (* except type)"/>
  </xsl:copy>
</xsl:template>

然后使用

 <xsl:variable name="partner"> 
     <sql:query connection="$connection" table="Partner" column="PartnerDuns,PartnerName,type" row-tag="Partner" /> 
</xsl:variable>
 <Partners>
    <xsl:apply-templates select="$partner/*" />
</Partners>

而不是 copy-of