XSLT将XML转换为文本
发布时间:2020-12-16 23:19:54 所属栏目:百科 来源:网络整理
导读:我有一个要求,我需要从 XML文档生成一个文本文件,生成的文本文件应该是基于某些规则的某种特定格式.我的XML看起来如下所示: info Tag1 Tag2 Tag3 PartNo12 /PartNo /Tag3 DBOMInf1 111 /DBOMInf1 DBOMInf2 sring /DBOMInf2 /Tag2 Tag2 Tag3 PartNo12 /PartN
我有一个要求,我需要从
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 我是新手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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |