Ссылка на вставленные элементы за один проход

Я пытаюсь вставить уникальные идентификаторы и ссылки на эти идентификаторы, используя один файл XSLT.

Учитывая XML:

<Parent>
  <Name>Dr Evil</Name>
  <Child>
    <Name>Scott Evil</Name>
  </Child>
</Parent>

И этот фрагмент XSLT после преобразования идентификаторов:

<xsl:template match="Parent">
  <xsl:copy>
    <xsl:apply-templates select="@*"/>
    <xsl:element name="UID"><xsl:value-of select="generate-id(.)"/></xsl:element>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

<xsl:template match="Child">
  <xsl:copy>
    <xsl:apply-templates select="@*"/>
    <xsl:element name="UID"><xsl:value-of select="generate-id(.)"/></xsl:element>
    <xsl:element name="ParentUID"><xsl:value-of select="../UID"/></xsl:element>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

Я получаю вывод:

<Parent>
  <UID>XYZ123</UID>
  <Name>Dr Evil</Name>
  <Child>
    <UID>ABC789</UID>
    <ParentUID/>                <-- expected <ParentUID>XYZ123</ParentUID>
    <Name>Scott Evil</Name>
  </Child>
</Parent>

Другими словами, элемент UID, вставляемый в Parent, не виден, когда элемент ParentUID вставляется в Child.

Я знаю, что мог бы использовать два прохода (два преобразования), но я действительно заинтересован чтобы попытаться сделать это в одном файле.

1
задан Mykro 2 September 2010 в 04:46
поделиться