2015-10-20 74 views
0

我在使用Choose語句和相應的測試條款。XSLT選擇 - 測試屬性值

如果有下面的XML(只是提取物),其代表企業架構師的數據模型exportet爲XMI:

<xmi:XMI xmi:version="2.1" xmlns:uml="http://schema.omg.org/spec/UML/2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:thecustomprofile="http://www.sparxsystems.com/profiles/thecustomprofile/1.0" xmlns:EAUML="http://www.sparxsystems.com/profiles/EAUML/1.0">  <xmi:Documentation exporter="Enterprise Architect" exporterVersion="6.5"/>  <uml:Model xmi:type="uml:Model" name="EA_Model" visibility="public">   <packagedElement xmi:type="uml:Package" xmi:id="EAPK_F3388CFE_57A7_4d84_8866_3FB3AADE565A" name="Data Model - SQLServer2012" visibility="public"> 
       <packagedElement xmi:type="uml:Artifact" xmi:id="EAID_B62341D4_41C6_4c83_A60A_4CA65C2E185E" name="Database SQLServer2012" visibility="public"/> 
       <packagedElement xmi:type="uml:Package" xmi:id="EAPK_BA7676C5_40BC_4bd9_A0F5_F6B15E534E8E" name="Logical Model" visibility="public"> 
        <packagedElement xmi:type="uml:Class" xmi:id="EAID_2DC36189_CCFB_40bf_A1CB_CD4FB08FE8B5" name="AnamneseStatus" visibility="public"> 
         <ownedAttribute xmi:type="uml:Property" xmi:id="EAID_9BBF5184_37F8_4729_9DC1_7ED3B4D8FC98" name="RCHIUNET05_ContextKey" visibility="public" isStatic="false" isReadOnly="false" isDerived="false" isOrdered="true" isUnique="false" isDerivedUnion="false"> 
          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="EAID_LI000001_37F8_4729_9DC1_7ED3B4D8FC98" value="1"/> 
          <upperValue xmi:type="uml:LiteralInteger" xmi:id="EAID_LI000002_37F8_4729_9DC1_7ED3B4D8FC98" value="1"/> 
          <type xmi:idref="EASQL_Server_2012_nvarchar"/> 
         </ownedAttribute> 
         <ownedAttribute xmi:type="uml:Property" xmi:id="EAID_BC1F93D0_A7F4_474c_A27E_26D3ABCCFB7B" name="MRNCmpdId" visibility="public" isStatic="false" isReadOnly="false" isDerived="false" isOrdered="false" isUnique="true" isDerivedUnion="false"> 
          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="EAID_LI000003_A7F4_474c_A27E_26D3ABCCFB7B" value="1"/> 
          <upperValue xmi:type="uml:LiteralInteger" xmi:id="EAID_LI000004_A7F4_474c_A27E_26D3ABCCFB7B" value="1"/> 
          <type xmi:idref="EASQL_Server_2012_nvarchar"/> 
         </ownedAttribute> 
.......... 

所以我的XSL,我會循環通過量的相關節點和提​​取表名和屬性。這工作沒有問題。現在我需要將EA數據類型轉換爲另一種數據類型定義。

比方說:EASQL_Server_2012_nvarchar需要成爲System.String

的XSL這樣做看起來是這樣的(因爲有其它數據類型的選擇語句將長於這裏顯示):

<xsl:for-each select="ownedAttribute[@xmi:type='uml:Property']"> 
    <xsl:text disable-output-escaping="yes">&lt;</xsl:text> 
    <xsl:value-of select="'Element Name=&quot;'"/> 
    <xsl:value-of select="@name"/> 
    <xsl:value-of select="'&quot; '"/> 

    <xsl:choose> 
     <xsl:when test="@xmi:idref = 'EASQL_Server_2012_nvarchar'"> 
     <xsl:value-of select="'Type=&quot;'"/> 
     <xsl:value-of select="'System.String'"/> 
     <xsl:value-of select="'&quot; '"/> 
     <xsl:value-of select="'MaxLength=&quot;'"/> 
     <xsl:value-of select="'400'"/> 
     <xsl:value-of select="'&quot; '"/> 
     </xsl:when> 
     <xsl:when test="@xmi:idref = 'EASQL_Server_2012_int'"> 
     <xsl:value-of select="'Type=&quot;'"/> 
     <xsl:value-of select="'System.Int32'"/> 
     <xsl:value-of select="'&quot; '"/> 
     </xsl:when> 
...... 

現在我的問題是,它不會達到測試條件,並且總是碰到「其他」語句。

有人明白爲什麼測試條件不起作用嗎?

謝謝你對此的任何幫助。

乾杯 桑德羅

回答

0

我懷疑是不是:

<xsl:when test="@xmi:idref = 'EASQL_Server_2012_nvarchar'"> 

你想做的事:

<xsl:when test="type/@xmi:idref = 'EASQL_Server_2012_nvarchar'"> 

因爲在部分例子中,你已經張貼,ownedAttribute(這是你的當您運行此測試時,上下文節點)沒有xmi:idref屬性,但其子元素type具有。


P.S.我不知道你整體做了什麼,但是我只要看到:

<xsl:text disable-output-escaping="yes">&lt;</xsl:text> 

這不應該是必需的。如果 - 看起來 - 您不輸出XML,請將輸出方法設置爲text。那麼不需要禁用輸出轉義。

+0

你好邁克爾 就在這一刻,我意識到你寫了什麼:)謝謝你的回覆,現在工作:) –