XMI 到 XML 通过使用 XSLT
XMI to XML by using XSLT
请问我是 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">
有很多方法可以做到这一点。这是一个:从匹配根节点的模板开始,为您提供有效的根标签(假设您的 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>
请问我是 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">
有很多方法可以做到这一点。这是一个:从匹配根节点的模板开始,为您提供有效的根标签(假设您的 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>