2015-04-23 87 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