如何为多个XML项构建xsl:attribute-sets?

时间:2012-04-27 10:53:30

标签: php xml xslt

我想用XSLTProcessor转换xml。 Everthing工作正常,但我遇到了属性集的问题。

我的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文件中使用attribue-sets。但是属性集必须在xsl的“头部”中定义。这意味着在“工作”-tags的foreach循环之外。 转换后,每个作业都获得第一个作业的相同属性。我错了什么?这是我使用的attribue-set:

  <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>

谢谢!

2 个答案:

答案 0 :(得分:2)

除了@mindlandmedia的正确答案之外,在许多情况下,可以使用所谓的“AVT”符号来指定元素及其属性:

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

答案 1 :(得分:1)

属性集用作一次提供多个属性的简写,因此不是写:

<xsl:attribute name="border">5</xsl:attribute>
<xsl:attribute name="cellpadding">15</xsl:attribute>
<xsl:attribute name="cellspacing">10</xsl:attribute>

每当我们想要同时指定所有三个时,可以指定一个属性集来在一行中完成

<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>

也许你需要进一步解释一下,你正在努力实现的目标