微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XSLT将XML转换为文本

我有一个要求,我需要从 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="'&#13;'" />
      <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,'&#13;')" />
   </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 举报,一经查实,本站将立刻删除。