1

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>

ありがとう!

4

2 に答える 2

2

@mindlandmedia の正解に加えて、多くの場合、「AVT」表記として知られるものを使用して、要素とその属性の両方を指定できます。

<job from="{/exportDelivery/jobAdvertisements/startDate}"/>
于 2012-04-27T11:50:17.437 に答える
1

属性セットは、一度に複数の属性を提供するための省略形として使用されるため、次のように書く代わりに:

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

3つすべてを一度に指定したいときはいつでも、属性セットを指定して1行でそれを行うことができます

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

正確に何を達成しようとしているのか、もう少し説明する必要があるかもしれません

于 2012-04-27T11:08:08.190 に答える