Моя проблема очень сложная, и я не знал, как получить это в одном предложении-вопросе.Поэтому я пытаюсь объяснить: я работаю с коннектором (вы можете увидеть код ввода XML ниже).В качестве источника у меня есть атрибут (xmi: id) элемента «ведомый_элементом», который является дочерним элементом элемента «подгруппа», и этот элемент «подгруппа» имеет ссылку на другой элемент «группа / узел», и мне нужно получить атрибут этой группы элементов.
Пример XML-ввода :
<packagedElement>
<group xmi:type="ActivityPartition" xmi:id="EAID_LIFELINE_1" name="Course manager">
<node xmi:idref="EAID_SUBGROUP_1"/>
</group>
<subgroup xmi:type="LoopNode" xmi:id="EAID_SUBGROUP_1" name="Loop Node">
<ownedBehavior xmi:type="Activity" xmi:id="EAID_ACTIVITY_1" name="for each course"/>
<ownedBehavior xmi:type="Activity" xmi:id="EAID_ACTIVITY_2" name="getCourse"/>
<containedEdge xmi:type="ControlFlow" xmi:id="EAID_CONNECTOR1" source="EAID_ACTIVITY_2" target="EAID_ACTIVITY_3"/>
</subgroup>
<group xmi:type="ActivityPartition" xmi:id="EAID_LIFELINE_2" name="Course">
<node xmi:idref="EAID_ACTIVITY_3"/>
</group>
<packagedElement xmi:type="Activity" xmi:id="EAID_ACTIVITY_3" name="selectCourse"/>
</packagedElement>
...
<connectors>
<connector xmi:idref="EAID_CONNECTOR1">
<source xmi:idref="EAID_ACTIVITY_2"/>
<target xmi:idref="EAID_ACTIVITY_3"/>
</connector>
</connectors>
...
Но в выводе я просто хочу соединители с правильным источником и целевым, что это за некоторый элемент "группа" с атрибутом id (EAID_LIFELINE_1 или EAID_LIFELINE_2).Итак, xml output должен выглядеть следующим образом:
<connectors>
<connector xmi:idref="EAID_CONNECTOR1">
<source xmi:idref="EAID_LIFELINE_1"/>
<target xmi:idref="EAID_LIFELINE_2"/>
</connector>
</connectors>
Я пытался сделать это с помощью ключевой функции и this XSLT :
<xsl:key name="grp" match="group" use="node/@xmi:idref" />
<xsl:key name="subact" match="subgroup/ownedBehavior[@xmi:type='Activity']" use="@xmi:id" />
...
<connector xmi:idref="EAID_CONNECTOR{position()}">
<source xmi:idref="{key('grp',../(key('subact',@source))/@xmi:id)/@xmi:id}"/> <!--This is place where I don´t know how to write that code to get to group...-->
<target xmi:idref="{key('grp', @target)/@xmi:id}"/>
</connector>
Цель верна , она показывает, что я хочу (EAID_LIFELINE_2), но для источника Я не знаю, как написать этот xpath, чтобы получить спасательный круг .Не могли бы вы помочь мне кто-нибудь?Спасибо.