我的XSLT中大多数都有这样的语句:
<RealisationRelation name=''
xmi.id="{concat($serverxmiid, ':', $infraservicexmiid)}"
xmi.type='I'
from="{$serverxmiid}"
to="{$infraservicexmiid}" />
这不是那么冗长,也不容易阅读。但是,我如何为此创建这样一个简单的语句而不是冗长的语句?
<xsl:element name="AccessRelation">
<xsl:attribute name="name">
<xsl:text></xsl:text>
</xsl:attribute>
<xsl:attribute name="xmi.id">
<xsl:value-of select="concat( $infraservicexmiid, ':', $artifactxmiid)"/>
</xsl:attribute>
<xsl:attribute name="xmi.type">
<xsl:text>I</xsl:text>
</xsl:attribute>
<xsl:attribute name="from">
<xsl:value-of select="$infraservicexmiid"/>
</xsl:attribute>
<xsl:attribute name="to">
<xsl:value-of select="$artifactxmiid"/>
</xsl:attribute>
<MM_Profile>
<xsl:attribute name="name">
<xsl:text>AccessRelation</xsl:text>
</xsl:attribute>
</MM_Profile>
<MM_Value>
<xsl:attribute name="name">
<xsl:text>accessType</xsl:text>
</xsl:attribute>
<xsl:attribute name="value">
<xsl:text>w</xsl:text>
</xsl:attribute>
</MM_Value>
</xsl:element>
我想知道如何以较不详细的形式获取这些MM_Profile
和MM_Value
部分。其他很容易。
答案 0 :(得分:3)
使用文字结果元素,就像您已经做的那样,只需定义属性,例如: <MM_Profile name="AccessRelation"/>
和<MM_Value name="accessType" value="w"/>
。如果您需要计算(部分)属性值,则使用属性值模板进行计算,例如, <AccessRelation xmi.id="{$infraservicexmiid}:{$artifactxmiid}" from="{$infraservicexmiid}"></AccessRelation>
。
答案 1 :(得分:2)
以下是您的XSLT简化使用 literal result elements 和 attribute value templates :
<AccessRelation name=""
xmi.id="{$infraservicexmiid}:{$artifactxmiid}"
xmi.type="I"
from="{$infraservicexmiid}"
to="{$artifactxmiid}">
<MM_Profile name="AccessRelation"/>
<MM_Value name="accessType" value="w"/>
</AccessRelation>
这与你已经为RealisationRelation
所做的一样(并且Martin Honnen帮助重申并命名,+1),以及文字结果元素可以嵌入到其他文字结果元素中的概念。
Creating element nodes using xsl:element
很少见,但是在必须计算元素名称而不是提前知道时可能会有所帮助。