首页 文章

XSLT将XML转换为文本

提问于
浏览
4

我有一个要求,我需要从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 | DESCRIPTION | NAME | DBOMInf1 | DBOMInf2 700 | 12 |发动机| 1200升| 111 | sring 700 | 12 |发动机| 1200升| 555 | ABCD

我是新手XSLT编程可以任何机构共享一些信息或示例如何实现这一点,我熟悉XSLT的基础,如模板匹配,选择值 .

任何链接或示例都将非常有用 . 谢谢

1 回答

  • 9

    看起来你想要为每个 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
    

相关问题