我有一个要求,我需要从
XML文档生成一个文本文件,生成的文本文件应该是基于某些规则的某种特定格式.我的XML看起来如下所示:
<info> <Tag1> <Tag2> <Tag3> <PartNo>12 </PartNo> </Tag3> <DBOMInf1> 111 </DBOMInf1> <DBOMInf2> sring </DBOMInf2> </Tag2> <Tag2> <Tag3> <PartNo>12 </PartNo> </Tag3> <DBOMInf1> 555 </DBOMInf1> <DBOMInf2> abcd </DBOMInf2> </Tag2> </Tag1> <Tag4> <Tag5> <Description>1200 liter </Description> <No>12</No> <Name>Engine</Name> <Id>700</Id> </Tag5> </Tag4> <action> <actionId>700</actionId> </action> </info>
>文本中的预期输出格式:
ACTIONID | NO |说明|名称| DBOMInf1 | DBOMInf2
700 | 12 |发动机| 1200升| 111 | SRING
700 | 12 |发动机| 1200升| 555 | ABCD
我是新手XSLT编程可以任何机构共享一些信息或示例如何实现这一点,我熟悉XSLT的基础,如模板匹配,选择值.
任何链接或示例都将非常有用.
谢谢
解决方法
看起来你想为每个Tag2元素添加一行,在这种情况下,通过执行以下操作可以轻松匹配(假设您当前位于info元素上)
<xsl:apply-templates select="Tag1/Tag2" />
但是看起来你也希望从Tag5元素中查找信息.在这种情况下,您可以使用键来查找基于No元素的值.关键将定义如下:
<xsl:key name="Tags" match="Tag5" use="No" />
要查找给定Tag2元素的标记,您可以执行以下操作:
<xsl:apply-templates select="key('Tags',normalize-space(Tag3/PartNo))" />
(注意,规范化空间,从元素中删除多余的空白)
这是完整的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="yes"/> <xsl:key name="Tags" match="Tag5" use="No" /> <xsl:template match="/info"> <xsl:text>ACTIONID|NO|DESCRIPTION|NAME|DBOMInf1|DBOMInf2</xsl:text> <xsl:value-of select="' '" /> <xsl:apply-templates select="Tag1/Tag2" /> </xsl:template> <xsl:template match="Tag2"> <xsl:apply-templates select="key('Tags',normalize-space(Tag3/PartNo))" /> <xsl:value-of select="concat(DBOMInf1,'|',DBOMInf2,' ')" /> </xsl:template> <xsl:template match="Tag5"> <xsl:value-of select="concat(Id,No,Name,Description,'|')" /> </xsl:template> </xsl:stylesheet>
应用于输入XML时,将输出以下文本
ACTIONID|NO|DESCRIPTION|NAME|DBOMInf1|DBOMInf2 700|12|Engine|1200 liter | 111 | sring 700|12|Engine|1200 liter | 555 | abcd
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。