Php 如何为多个XML项构建xsl:attribute集?

Php 如何为多个XML项构建xsl:attribute集?,php,xml,xslt,Php,Xml,Xslt,我想用XSLTProcessor转换xml。一切正常,但属性集有问题 我的XML看起来像: <?xml version="1.0" encoding="UTF-8"?> <exportDelivery> <job>/* many other tags and data */</job> <job>/* many other tags and data */</job> <job>/* many other tag

我想用XSLTProcessor转换xml。一切正常,但属性集有问题

我的XML看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<exportDelivery>
<job>/* many other tags and data */</job>
<job>/* many other tags and data */</job>
<job>/* many other tags and data */</job>
</exportDelivery>

/*许多其他标记和数据*/
/*许多其他标记和数据*/
/*许多其他标记和数据*/
如果要在新xml中使用属性,必须在xsl文件中使用属性集。但是属性集必须在xsl的“头”中定义。这意味着“作业”标记不在foreach循环的范围内。 转换后,每个作业都会获得与第一个作业相同的属性。我做错了什么?以下是我使用的属性集:

  <xsl:attribute-set name="premium">
    <xsl:attribute name="from">
      <xsl:value-of select="/exportDelivery/jobAdvertisements/startDate"/>
    </xsl:attribute>
    <xsl:attribute name="to">
      <xsl:value-of select="/exportDelivery/jobAdvertisements/endDate"/>
    </xsl:attribute>
  </xsl:attribute-set>


谢谢

属性集用作一次提供多个属性的速记,因此不必编写:

<xsl:attribute name="border">5</xsl:attribute>
<xsl:attribute name="cellpadding">15</xsl:attribute>
<xsl:attribute name="cellspacing">10</xsl:attribute>
5
15
10
每次我们想要同时指定这三个属性时,可以在一行中指定一个属性集

<xsl:attribute-set name="set_table">...</xsl:attribute-set>

<table xsl:use-attribute-sets="set_table">
。。。
这些“属性集”只能定义一次。 对你来说,你不想做这样的事吗

<job>
  <premium from="blaDate" to="fooDate"/>
</job>

如果是这样,我看不出是什么阻止了您在转换过程中插入这些元素:

<xsl:template match="job">
  <job>
    <xsl:attribute name="from">
      <xsl:value-of select="/exportDelivery/jobAdvertisements/startDate"/>
    </xsl:attribute>
  </job>
</xsl:template>


也许您需要进一步解释一下,除了@mindlandmedia的正确答案之外,在许多情况下,您还可以使用被称为“”的符号指定元素及其属性:

<job from="{/exportDelivery/jobAdvertisements/startDate}"/>