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