XSLT将不规则XML中的特定元素提取为csv格式

时间:2017-05-25 14:11:43

标签: xml csv xslt

我有一个不规则/未格式化的XML文件。结构看起来像这样 -

<Host> 
 <element1>type0</element1>
 <element2>Fruits</element2>
 <NodeA>
   <element1>type1</element1>
   <element2>Fruits</element2>
   <NodeB>
     <element1>type2</element1>
     <element2>Fruits</element2>
     <NodeC>
       <element1>type3</element1>
       <element2>Fruits</element2>
       <NodeD>
         <element1>type4</element1>
         <element2>Vegetables</element2>
       </NodeD>
     </NodeC>
   </NodeB>
 </NodeA>
 <NodeE>
   <element1>type5</element1>
   <element2>Fruits</element2>
   <NodeF>
     <element1>type6</element1>
     <element2>Vegetables</element2>
   </NodeF> 
 </NodeE>  
</Host>

我想以CSV格式从XML中提取<element1>。这意味着<element1>的所有值都应该被提取为 -

type0,type1,type2,type3,type4,type5,type6

我已经尝试了下面的XSLT,但我得到了表格格式的元素。我无法以上述格式获取数据。 XSLT写的 -

<xsl:stylesheet version="1.0"  
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:template match="/">
  <html>
  <body>
  <table border="1">
    <xsl:for-each select="//element1">
    <tr>
      <td><xsl:value-of select="."/></td>
    </tr>
    </xsl:for-each>
  </table>
  </body>
  </html> 
</xsl:template>
</xsl:stylesheet>

任何答案/建议都会有很大的帮助。谢谢

1 个答案:

答案 0 :(得分:0)

如果您想要CSV结果,请删除所有HTML代码,只需添加逗号即可:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8" />

<xsl:template match="/">
    <xsl:for-each select="//element1">
        <xsl:value-of select="."/>
        <xsl:if test="position()!=last()">,</xsl:if>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>