XSLT输出包括额外的字段

时间:2013-05-22 13:06:17

标签: xml xslt ssis

我第一次参与XSLT。我正在使用VS 2012创建一个SSIS包,使用XSLT将XML数据导入到SQL表中,以平展一些XML数据。在执行任务时,输出XML包含未形成XML的额外数据。我很接近,但我不确定如何做对。

我尝试添加文件,但我似乎无法将它们带入此空间。 。 。我无法添加屏幕截图。我希望在发布问题后,我可以附加文件。 。 。

编辑:粘贴评论:

输入XML文件以此结尾

</PropertyReports>
</RVSCompleteReport>
</REPORT>
<SEARCH_NAMES ErrorInfo="">
  <SEARCH_NAME>BALLANCE LAMBERT LISA</SEARCH_NAME>
  <SEARCH_NAME>BALLANCELAMBERT LISA</SEARCH_NAME>
  <SEARCH_NAME>BALLANCE-LAMBERT LISA</SEARCH_NAME>
  <SEARCH_NAME>LAMBERT JACK</SEARCH_NAME>
  <SEARCH_NAME>LAMBERT JOHN</SEARCH_NAME>
  <SEARCH_NAME>LAMBERT JOHN AND LISA</SEARCH_NAME>
</SEARCH_NAMES>
</RvsStandardDelivery>

搜索名称将作为未格式化的

添加到输出中
</RVSCompleteReport> 
</REPORT> 
BALLANCE LAMBERT LISABALLANCELAMBERT LISABALLANCE-LAMBERT 
LISALAMBERT JACKLAMBERT JOHNLAMBERT JOHN AND LISALAMBERT 
JOHN RLAMBERT JOHN R AND LISA

XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/> 
  <xsl:template match="RvsStandardDelivery/REPORT">
    <REPORT>
      <xsl:for-each select="RVSCompleteReport">
        <RVSCompleteReport>
          <OrdrNum>
            <xsl:value-of select="ReportInfo/ordernumber"/>
          </OrdrNum>
          <borrowerName>
            <xsl:value-of select="ReportInfo/borrowername"/>
          </borrowerName>
          <PropAdd>
            <xsl:value-of select="ReportInfo/propertyaddress"/>
          </PropAdd>
        </RVSCompleteReport>
      </xsl:for-each>
    </REPORT>
  </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

这几乎可以肯定是因为您没有为SEARCH_NAMESdefault / built in templates are processed提供模板

Dimitre有一个很好的调试模板,你可以添加它来在同一篇文章中找到这些不匹配的元素。

在您的情况下,您可以捕获虚假元素:

<xsl:template match='SEARCH_NAMES'></xsl:template>

但更好的是,您可以捕获根,然后系统地应用模板(并用for-each替换apply-template):

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

  <xsl:template match="/">
    <xsl:apply-templates select="RvsStandardDelivery/REPORT"></xsl:apply-templates>
  </xsl:template>

  <xsl:template match="REPORT">
    <REPORT>
      <xsl:apply-templates select="RVSCompleteReport"></xsl:apply-templates>
    </REPORT>
  </xsl:template>

  <xsl:template match="RVSCompleteReport">
    <RVSCompleteReport>
      <OrdrNum>
        <xsl:value-of select="ReportInfo/ordernumber"/>
      </OrdrNum>
      <borrowerName>
        <xsl:value-of select="ReportInfo/borrowername"/>
      </borrowerName>
      <PropAdd>
        <xsl:value-of select="ReportInfo/propertyaddress"/>
      </PropAdd>
    </RVSCompleteReport>
  </xsl:template>

</xsl:stylesheet>