0

我想在 for-each 循环中选择 XMI 标记的父级。这是我的输入:

<XMI xmi.version='1.2' xmlns:UML="org.omg.xmi.namespace.UML">
    <XMI.content>
        <UML:Model xmi.id='eee_1045467100313_135436_1' name='Data'>
            <UML:Namespace.ownedElement>
                <UML:Package xmi.id='_9_0_bc102e5_1427365805826_580042_23'
                    name='migration2'>

                <UML:Package xmi.id='_9_0_bc102e5_1427365805826_580042_22'
                    name='migration'>
                    <UML:Class xmi.id='_9_0_bc102e5_1427367042666_255023_151'
                        name='Employee'>
                        <UML:Classifier.feature>
                            <UML:Attribute xmi.id='_9_0_bc102e5_1427367052819_893122_168'
                                name='cin'>
                            </UML:Attribute>
                        </UML:Classifier.feature>
                    </UML:Class>
                    <UML:Class xmi.id='_9_0_bc102e5_1427367042666_255023_152'
                        name='Employee2'>
                        <UML:Classifier.feature>
                            <UML:Attribute xmi.id='_9_0_bc102e5_1427367052819_893122_169'
                                name='cin2'>
                            </UML:Attribute>
                        </UML:Classifier.feature>
                    </UML:Class>
                    <UML:Class xmi.id='_9_0_bc102e5_1427367042666_255023_153'
                        name='Employee3'>
                        <UML:Classifier.feature>
                            <UML:Attribute xmi.id='_9_0_bc102e5_1427367052819_893122_170'
                                name='cin3'>
                            </UML:Attribute>
                        </UML:Classifier.feature>
                    </UML:Class>

                </UML:Package>
              </UML:Package>
            </UML:Namespace.ownedElement>
        </UML:Model>
    </XMI.content>
</XMI>

所以要使用 XSLT 选择 UML:Package 我使用 for-each 循环的选择选项:

<xsl:for-each
                    select="XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Package">
                    <packagedElement>
                        <xsl:attribute name="xmi:type">uml:package</xsl:attribute>
                        <xsl:attribute name="xmi.id">
                        <xsl:value-of select='@xmi.id' />
                    </xsl:attribute>
                        <xsl:attribute name="name">
                        <xsl:value-of select='@name' />
                    </xsl:attribute>
</xsl:for-each>

有没有可能更换

select="XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Package"

PS:我试过 */UML:Package 和 ../UML:Package 但没有成功。有什么帮助吗?

4

2 回答 2

0

要选择所有UML:Package元素,您可以简单地编写

select="//UML:Package"
于 2015-04-23T11:11:14.073 回答
0

你的问题并不完全清楚。

我想在 for-each 循环中选择 XMI 标记的父级。

这部分很简单:只需使用parent::*or ../*。但这仅在您已经处于某个具有父节点的节点的上下文中时才有效。所以你的问题:

有没有可能更换

select="XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Package"

在这种情况下没有意义。

于 2015-04-23T10:25:38.807 回答