带有XSLT循环的XMI标记

时间:2015-04-17 08:23:31

标签: xml xslt uml xmi

我发现xmi标签存在问题(例如:UML:Package)我真正的问题是我无法使用select选项进行每个循环(select =" UML :包")。 这是XML输入代码:



<XMI xmi.version='1.2' xmlns:UML="org.omg.xmi.namespace.UML">
  <UML:Package type="stock" exch="nyse"   symbol="ZCXM" company="zacx corp"
        price="28.875"/>
  <UML:Package type="stock" exch="nasdaq" symbol="ZFFX" company="zaffymat inc"
        price="92.250"/>
  <UML:Package type="stock" exch="nasdaq" symbol="ZYSZ" company="zysmergy inc"
        price="20.313"/>
</XMI>
&#13;
&#13;
&#13;

这是我的xslt代码:

&#13;
&#13;
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"  xmlns:UML="org.omg.xmi.namespace.UML" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output indent="yes" />

	<xsl:template match="/">
		<xmi:XMI>
			<xsl:for-each select="UML:Package">
				<stock>
					<xsl:attribute name="exchange">
            <xsl:value-of select="@exch" />
        </xsl:attribute>
					<name>
						<xsl:value-of select="@company" />
					</name>
					<symbol>
						<xsl:value-of select="@symbol" />
					</symbol>
					<price>
						<xsl:value-of select="@price" />
					</price>
				</stock>
				<hi>
				</hi>
			</xsl:for-each>

		</xmi:XMI>
	</xsl:template>

</xsl:stylesheet>
&#13;
&#13;
&#13;

这就是我得到的结果:

&#13;
&#13;
<?xml version="1.0" encoding="UTF-8"?><XMI xmlns:UML="org.omg.xmi.namespace.UML"/>
&#13;
&#13;
&#13;

控制台上没有错误:

10:10:19,639 INFO  [main] Main  - javax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl

10:10:19,639 INFO [main] Main - java.endorsed.dirs = D:\ PFE.metadata.plugins \ org.eclipse.wst.xsl.jaxp.launching \ endorsed 10:10:19,639 INFO [main] Main - launchFile:D:\ PFE.metadata.plugins \ org.eclipse.wst.xsl.jaxp.launching \ launch \ launch.xml 10:10:19,873 INFO [main] JAXPSAXProcessorInvoker - 转换...... 10:10:19,889 INFO [main] JAXPSAXProcessorInvoker - 完成。

任何帮助?

1 个答案:

答案 0 :(得分:0)

您报告的结果我使用您的代码获得的结果。样式表有两个主要问题:

  1. 您正在使用前缀xmi:而不将其绑定到命名空间;这会生成解析错误,不会产生任何结果。

  2. 从模板的上下文 - 即/根节点 - 指令:

    <xsl:for-each select="UML:Package">
    

    什么都不选。它必须是:

    <xsl:for-each select="XMI/UML:Package">