将XML转换为文本的XSLT

将XML转换为文本的XSLT,xslt,Xslt,我有一个需求,我需要从XML文档生成一个文本文件,生成的文本文件应该是基于一些规则的特定格式。我的XML如下所示: <info> <Tag1> <Tag2> <Tag3> <PartNo>12 </PartNo> </Tag3> <DBOMInf1> 111 </DBOMInf1> <DBOMInf2> sring </DBOMInf

我有一个需求,我需要从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>

12
111
斯林
12
555
abcd
1200升
12
引擎
700
700
  • 预期的文本输出格式:
ACTIONID | NO | DESCRIPTION | NAME | DBOMInf1 | DBOMInf2 700 | 12 |发动机| 1200升| 111 |发动机 700 | 12 |发动机| 1200升| 555 | abcd

我是XSLT编程新手,任何人都可以分享一些关于如何实现这一点的信息或示例,我熟悉XSLT的基础,比如模板匹配,选择的价值

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

看起来您希望每个Tag2元素都有一行,在这种情况下,通过执行以下操作(假设您当前位于info元素上),这些元素可以轻松匹配

<xsl:apply-templates select="Tag1/Tag2" />

你能编辑你的问题并详细说明什么是“一些规则”吗实际上是这样的,因为您的预期输出并不完全清楚。看起来您希望每个Tag2元素都有一行,从Tag4元素中查找额外的信息,但这只是猜测。是的,您是正确的,我有参考格式&我的输出应该有来自Tag2、Tag4等的值,如图所示排列在列中非常感谢,蒂姆,我正在努力回复你。
<xsl:key name="Tags" match="Tag5" use="No" />
<xsl:apply-templates select="key('Tags', normalize-space(Tag3/PartNo))" />
<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>
ACTIONID|NO|DESCRIPTION|NAME|DBOMInf1|DBOMInf2
700|12|Engine|1200 liter | 111 | sring 
700|12|Engine|1200 liter | 555 | abcd