XSLT迭代转换为CSV

时间:2015-10-07 09:45:19

标签: xml csv xslt xpath

有人可以帮助我将xml转换为csv(以下格式)。

XML>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
      <Shop>Walmart</Shop>
  </soapenv:Header>
  <soapenv:Body>
    <ResponseEnvelope>
      <Response>
        <Part_electronics>
          <type>electronics</type>
          <item>Freeze</item>
        </Part_electronics>
        <Part_utility>
          <type>utility</type>
          <item>Parker</item>
        </Part_utility>
        <Part_grocery>
          <type>grocery</type>
          <item>sugar</item>
        </Part_grocery>
      </Response>
    </ResponseEnvelope>
  </soapenv:Body>
</soapenv:Envelope>

强文 CSV输出:

Walmart,electronics,Freeze
Walmart,utility,pen
Walmart,grocery,sugar

提前致谢。

1 个答案:

答案 0 :(得分:1)

看起来你想要每一个&#34;部分_&#34;元件。在这种情况下,您应该从选择这些元素开始

<xsl:for-each select="//Response/*[starts-with(local-name(), 'Part_')]">

然后你可以通过选择所有孩子来获取字段

     <xsl:for-each select="*">
         <xsl:text>,</xsl:text>
         <xsl:value-of select="text()" />
     </xsl:for-each>

这假设所有&#34;部分_&#34;元素具有相同数量的元素。

试试这个XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="text" indent="yes"/> 
   <xsl:template match="/">
      <xsl:variable name="Shop" select="//Shop" />
      <xsl:for-each select="//Response/*[starts-with(local-name(), 'Part_')]"> 
         <xsl:value-of select="$Shop"/> 
         <xsl:for-each select="*">
             <xsl:text>,</xsl:text>
             <xsl:value-of select="text()" />
         </xsl:for-each>
         <xsl:text>&#xA;</xsl:text>
      </xsl:for-each> 
   </xsl:template> 
</xsl:stylesheet>

这输出以下内容:

Walmart,electronics,Freeze
Walmart,utility,Parker
Walmart,grocery,sugar