我想用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>
谢谢!
答案 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>
也许你需要进一步解释一下,你正在努力实现的目标