首页 > 解决方案 > 从 XML 创建 CSV 时 XSL 的性能

问题描述

我正在尝试使用 PROC XSL 并行处理 8 个 XML。每个 XML 都有不同的结构和复杂的分层路径。我试图从每个 XML 中创建 CSV。

我创建的 XSLT 工作表使用的是为 XML 提供的 XSD。但实际的 XML 文件没有在 XSD 中指定的所有列的值,并且某些列根本没有出现在 XML 中。

例如:基于 XSD,我们希望 XML 如下所示

  <Master2>
   <Child1>
      <tag1>name1</tag1>
      <tag2>name2</tag2>
      <TypeArray>
         <value>1</value>
         <value>13</value>
      </TypeArray>  
      <TypeArray1>
         <Quanutityvalue>1</Quanutityvalue>
         <Qualityvalue>13</Qualityvalue>
      </TypeArray1>     
  </Child1>
</Master2>

但是我们收到如下

<Master2>
   <Child1>
      <tag1>name1</tag1>
      <TypeArray>
         <value>1</value>
         <value>13</value>
      </TypeArray>    
  </Child1>
</Master2>

当我们创建 XSLT 时,我们创建了所有列。我们收到的 XML 中有多个表的数据。我们从每个 XML 中创建 4 个 csv。每个 CSV 有大约 270 列。处理 8 个文件的总时间为 3 分 50 秒。

XSL 是否也需要更多时间来读取 NULL 标记?还是时间合理?我在 SAS 中使用 PROC XSL 选项

示例 XSLT

<xsl:template match="/"> 
  <xsl:text>tag1,tag2,TypeArray,Quanutityvalue,Qualityvalue</xsl:text> 
     <xsl:text>&#xA;</xsl:text> 
     <xsl:for-each select="Master1/Master2/Child1">
         <xsl:call-template name="CsvEscape"><xsl:with-param name="value" select="normalize- 
          space(tag1)"/></xsl:call-template>
         <xsl:text>,</xsl:text>
         <xsl:call-template name="CsvEscape"><xsl:with-param name="value" select="normalize- 
          space(tag2)"/></xsl:call-template>
         <xsl:text>,</xsl:text>
<xsl:call-template name="CsvEscape"><xsl:with-param name="value" select="TypeArray/value"/> 
    <xsl:text>,</xsl:text>
      <xsl:call-template name="CsvEscape"><xsl:with-param name="value" select="TypeArray1/Quanutityvalue"/> 
        <xsl:text>,</xsl:text>
        <xsl:call-template name="CsvEscape"><xsl:with-param name="value" select="TypeArray1/Qualityvalue"/> 
       <xsl:text>&#xA;</xsl:text>
</xsl:for-each>

</xsl:模板>

谢谢

标签: xsltsas

解决方案


推荐阅读