使用XSLT选择标记的父级

时间:2015-04-23 09:13:48

标签: xml xslt xmi

我想在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循环的select选项:

<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但它没有成功。 有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

你的问题并不完全清楚。

  

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

这部分很简单:只需使用../*或不久select="XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Package" 即可。但是只有当您已经处于具有父级的某个节点的上下文中时,这才会起作用。所以你的问题:

  

是否有可能更换

{{1}}

在这种情况下毫无意义。

答案 1 :(得分:0)

要选择所有select="//UML:Package" 元素,您只需编写

即可
awk -F", " -v OFS=", " 'NR > 1 {$3 = int(rand()*100000000)} {print}' file