使用XSLT将XMI转换为XML

时间:2015-07-30 13:25:20

标签: xml xslt uml xmi

请问我是XSLT的初学者。有人可以解释一下如何将这个XMI文件转换为XML文件吗?

<?xml version="1.0" encoding="UTF-8"?>
<projet:Config xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:test="http://projet.org/test" xmlns:occi="http://schemas.ogf.org/projet">
<use href="extensions/plugin.xmi#/"/>

<group id="group1">
    <type href="extensions/plugin#//[term='host']"/>
    <variable name="v1" value="x86"/>
    <variable name="v2"  value="Linux"/>
    <variable name="v3"  value="Xen"/>  
</group>

</projet:Config>

将以前的XMI转换为xml文件,例如:

<host v1="x86" v2="Linux" v3="Xen">

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。这是一个:从模板开始匹配根节点,为您提供有效的根标记(假设您的group节点是可重复的);下面有一个匹配group节点的模板,下面有一个模板,该模板匹配该组中的variable个节点。在variable模板中构建属性。

请注意,您的输入XML无效并可能导致问题 - projet前缀未声明,这就是我使用local-name()语法引用它的原因。

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

    <xsl:template match="/">
        <root>
            <xsl:apply-templates />
        </root>
    </xsl:template>

    <xsl:template match="/*[local-name()='Config']/group">
       <xsl:element name="{type/substring-before(substring-after(@href,'term='''), ''']')}">
          <xsl:apply-templates />
      </xsl:element>
    </xsl:template>

    <xsl:template match="variable">
        <xsl:attribute name="{@name}"><xsl:value-of select="@value" /></xsl:attribute>
    </xsl:template>


    <xsl:template match="text()" />
</xsl:transform>