2015-04-23 86 views
0

我想在for-each循环中选择XMI标记的父项。 这里是我输入:使用XSLT选择标记的父项

<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> 

所以选择UML:包用XSLT我使用的选择选项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:我心中已经e试过*/UML:Package和../UML:Package,但没有成功。 有帮助吗?

+0

UML哪':Package'do要选择?有两个,你可能应该按名称选择它们。顺便说一句,它很烦人,代码伸出窗口,由于你的标签。 –

+0

我想在我的输入中选择每个UML:Package,以便对其进行更改并保持输入文件的层次结构相同 – Iheb

回答

0

对于选择所有UML:Package元素,你可以简单地写

select="//UML:Package" 
+0

谢谢你它适合我! – Iheb

+0

@Iheb我很高兴你找到了答案,但是这不会“*选择for-each循环中的XMI标签的父级。*”。 –

0

你的问题并不完全清楚。

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

这部分很简单:只需使用parent::*或简称../*。但是,只有当你已经在具有父节点的某个节点的上下文中时,这才会起作用。所以你的问题:

是否有可能更换

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

使得在这种情况下没有任何意义。

+0

如何在for-each循环中使用“parent :: *”? – Iheb

+0

用它来做什么?请扩展您的问题并解释您正在尝试做什么。 –

+0

好的, 在for-each循环中使用parent :: *来选择父节点 – Iheb