带有 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 - 完成。
有什么帮助吗?
您报告的结果不是我使用您的代码得到的结果。您的样式表有两个主要问题:
您使用的前缀 xmi:
没有绑定到命名空间;这会产生解析错误并且不会产生任何结果。
从模板的上下文 - 即 /
根节点 - 指令:
<xsl:for-each select="UML:Package">
什么都不选。必须是:
<xsl:for-each select="XMI/UML:Package">
我发现 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 - 完成。
有什么帮助吗?
您报告的结果不是我使用您的代码得到的结果。您的样式表有两个主要问题:
您使用的前缀
xmi:
没有绑定到命名空间;这会产生解析错误并且不会产生任何结果。从模板的上下文 - 即
/
根节点 - 指令:<xsl:for-each select="UML:Package">
什么都不选。必须是:
<xsl:for-each select="XMI/UML:Package">