【问题标题】:Convert attributes to elements将属性转换为元素
【发布时间】:2015-02-02 15:36:33
【问题描述】:

您好,我有以下 XML,

<?xml version = "1.0" encoding = "utf-8"?>
<root>
<document> 
    <field   level = "document" name = "Client Number" value = "00000300688"/>
    <field   level = "document" name = "Client Short Name" value = "SOME CLIENT"/>
    <field   level = "document" name = "IBS Oper Acct ACBS Cust Num" value = "00004437252"/>
    <field   level = "document" name = "Document Type" value = "LaserPro Disbursement Request form"/>
    <field   level = "document" name = "Effective Date" value = "02-13-2014"/>
</document> 
</root>

我需要这样格式化:

<?xml version = "1.0" encoding = "utf-8"?>
<root>
<document>
    <ClientNumber>00000300688</ClientNumber>
    <ClientShortName>SOME CLIENT</ClientShortName>
    <IBSOperAcctACBSCustNum>00004437252</IBSOperAcctACBSCustNum>
    <DocumentType>LaserPro Disbursement Request form</DocumentType>
    <EffectiveDate>02-13-2014</EffectiveDate>
</document> 
</root>

所以,基本上我需要将我的属性转换为元素(当然删除空格,因为我认为元素不能包含空格)。

问题是我有超过 30,000 个 XML 文件需要像这样转换。然后,我使用 SSIS 将此数据导入 SQL Server 中的表中。基本上,我的每个 .xml 文件都是目标表中的一行。我希望我的 XML 属性成为该表中的列,属性的值成为行数据。

我对 XML 很陌生,所以任何提示都会有所帮助!非常感谢!

【问题讨论】:

  • 那么你的问题到底是什么?
  • 对不起,我不是更清楚。我需要有关如何将 30,000 多个 xml 文件从源格式(属性)批量转换为所需输出(元素)的帮助。有道理?对不起,如果我感到困惑!
  • 另外,如果有某种方法可以通过 SSIS 中的 .xsd 文件实现这一点,那将是理想的。我知道如何在 SSIS 中执行一个 foreachloop 来处理 30,000 多个文件。
  • 这是一次性的数据迁移,还是必须定期进行?
  • 定期,但不是那么频繁。应该是每季吧。所以它不必完全自动化或任何东西。

标签: xml xslt ssis


【解决方案1】:

这个 XSLT 转换:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

  <xsl:template match="field">
    <xsl:element name="{translate(@name, ' ', '')}">
      <xsl:value-of select="@value"/>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

将采用您给定的 XML:

<?xml version = "1.0" encoding = "utf-8"?>
<root>
<document> 
    <field   level = "document" name = "Client Number" value = "00000300688"/>
    <field   level = "document" name = "Client Short Name" value = "SOME CLIENT"/>
    <field   level = "document" name = "IBS Oper Acct ACBS Cust Num" value = "00004437252"/>
    <field   level = "document" name = "Document Type" value = "LaserPro Disbursement Request form"/>
    <field   level = "document" name = "Effective Date" value = "02-13-2014"/>
</document> 
</root>

并生成以下 XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <document> 
      <ClientNumber>00000300688</ClientNumber>
      <ClientShortName>SOME CLIENT</ClientShortName>
      <IBSOperAcctACBSCustNum>00004437252</IBSOperAcctACBSCustNum>
      <DocumentType>LaserPro Disbursement Request form</DocumentType>
      <EffectiveDate>02-13-2014</EffectiveDate>
   </document> 
</root>

根据要求。

【讨论】:

  • 谢谢!!!使用上面的 XSLD,我在 SSIS 控制流中创建了一个 XML 任务。 XML 任务循环并打开每个 XML 文件,并通过您的 XSLD 对其进行处理,从而生成我正在寻找的确切输出!然后,我将该输出 XML 存储在一个变量中,该变量被传递到数据流任务中。在我的数据流任务中,我有到我的 SQL Server 表的映射。这正是我一直在寻找的。再次感谢!!!
猜你喜欢
  • 2017-06-17
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多