Как записать атрибут ID в другой узел - PullRequest
1 голос
/ 20 января 2012

Я новичок в XSLT и не знаю, как мне это преобразовать:

   <GCInitialStep id="id_A" name="INIT"/>
   <GCTransition id="id_B" name="T1"/>
   <GCStep id="id_C" name="A1"/>
   <!-- ... -->
   <GCLink fromObject="id_A" toObject="id_B"/>  
   <GCLink fromObject="id_B" toObject="id_C"/>

Для

   <InitialStep id="id_A" name="INIT"
                parentid=""
                childid="id_B"/>
   <Transition id="id_B" name="T1"
               parentid="id_A"
               childid="id_C"/>
   <Action id="id_C" name="A1"
         parentid="id_B"
         childid=""/>

Возможно ли это? Как?

Спасибо:)

1 Ответ

2 голосов
/ 20 января 2012

Используйте что-то вроде этого:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes" />

    <xsl:key name="fromKey" match="GCLink" use="@fromObject"/>
    <xsl:key name="toKey" match="GCLink" use="@toObject"/>

    <xsl:template match="/root">
        <xsl:copy>
            <xsl:apply-templates select="*[not(self::GCLink)]"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*">
        <xsl:element name="{substring(name(), 3)}">
            <xsl:copy-of select="@id"/>
            <xsl:copy-of select="@name"/>
            <xsl:attribute name="parentid">
                <xsl:value-of select="key('toKey', @id)/@fromObject"/>
            </xsl:attribute>
            <xsl:attribute name="childid">
                <xsl:value-of select="key('fromKey', @id)/@toObject"/>
            </xsl:attribute>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

применяется к

<root>
    <GCInitialStep id="id_A" name="INIT"/>
    <GCTransition id="id_B" name="T1"/>
    <GCStep id="id_C" name="A1"/>
    <GCLink fromObject="id_A" toObject="id_B"/>
    <GCLink fromObject="id_B" toObject="id_C"/>
</root>

выходам

<root>
  <InitialStep id="id_A" name="INIT" parentid="" childid="id_B" />
  <Transition id="id_B" name="T1" parentid="id_A" childid="id_C" />
  <Step id="id_C" name="A1" parentid="id_B" childid="" />
</root>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...