XSLT: Как сопоставить (в шаблоне) два разных элемента - PullRequest
2 голосов
/ 16 апреля 2019

У меня есть 2 разных элемента: "edge" и "containsEdge", но для обоих мне нужно проделать одну и ту же работу с ними. Я хочу использовать один шаблон для обоих.

Как будет выглядеть шаблон для соответствия "edge или containsEdge"?

Ввод XML:

<packagedElement xmi:type="uml:Activity" xmi:id="EAID_AC000001_2A09_4795_BBF6_189BCF2176FD" name="EA_Activity1" visibility="public">
    <edge xmi:type="uml:ControlFlow" xmi:id="EAID_7178621A_9B6C_4fd5_9E5D_AFB31B6DEF24"/>
    <subgroup xmi:type="uml:LoopNode" xmi:id="EAID_61782877_58D5_41e6_B4BA_3C79CC4ADCFF">
        <containedEdge xmi:type="uml:ControlFlow" xmi:id="EAID_C43E5114_A121_4a58_948C_3F7865CDDE19"/>
        <containedEdge xmi:type="uml:ControlFlow" xmi:id="EAID_1300F655_DD16_4303_BD5F_E3180B655DC4"/>
    </subgroup>
    <edge xmi:type="uml:ControlFlow" xmi:id="EAID_2612A8E5_CBC2_406d_B3F5_255C49DC728F"/>
    <edge xmi:type="uml:ControlFlow" xmi:id="EAID_7F330DC1_68BA_48e2_BAE2_15DC5BCAC772"/>
</packagedElement>

Мне нужно использовать шаблон, похожий на этот, но "или" не должно быть, я думаю:

<xsl:for-each select="packagedElement/edge or packagedElement/subgroup/containedEdge">
        <element geometry="SX=0;SY=0;EX=0;EY=0;Path=;" subject="EAID_CONNECTR{substring(@xmi:id, 14, 28)}" style=";Hidden=0;"/>   
    </xsl:for-each>

1 Ответ

2 голосов
/ 16 апреля 2019

Используйте объединение в выборе:

<xsl:for-each select="packagedElement/edge|packagedElement/subgroup/containedEdge">
  <element geometry="SX=0;SY=0;EX=0;EY=0;Path=;" subject="EAID_CONNECTR{substring(@xmi:id, 14, 28)}" style=";Hidden=0;"/>   
</xsl:for-each>
...