带有 XSLT 循环的 XMI 标签

XMI tags with XSLT loops

我发现 xmi 标签有问题(示例:UML:Package)我真正的问题是我不能使用带有 select 选项的 for-each 循环(select="UML:Package")。 这是 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>

这是我的 xslt 代码:

<?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>

这就是我得到的结果:

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

控制台上没有错误:

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

10:10:19,639 INFO [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 信息 [主要] JAXPSAXProcessorInvoker - 完成。

有什么帮助吗?

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

  1. 您使用的前缀 xmi: 没有绑定到命名空间;这会产生解析错误并且不会产生任何结果。

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

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

    什么都不选。必须是:

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