【问题标题】:XMI to XML by using XSLT使用 XSLT 将 XMI 转换为 XML
【发布时间】:2015-07-30 13:25:19
【问题描述】:

我是 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">

【问题讨论】:

  • 你试过了吗?

标签: xml xslt uml xmi


【解决方案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>

【讨论】:

  • 当我运行命令行xsltproc -o test.xml config.xsl config.xmi 我得到一个错误config.xmi:4: namespace error : Namespace prefix projet on Config is not defined 我该如何纠正这个错误?还有一个问题,还有另一种比命令行更容易获取xml文件的方法吗?
  • 您必须将命名空间声明添加到输入的根节点:xmlns:projet="www.tempuri.org"。或者,从输入文档中完全删除 projet 前缀。或者,找到一个能够容忍 XML 中的此类错误的 XSLT 处理器。
  • 谢谢。它可以工作,但我有这个错误“编译错误:文件 config.xsl 第 2 行元素转换”。你能给我推荐一些文档吗?
  • 抱歉,我什至不确定您使用的是什么处理器,而且我对各种处理器的所有选项都不是很熟悉。
猜你喜欢
  • 2016-08-24
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多