Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS XML任务中的XSLT转换,仅输出XML文档的某些节点_Xml_Xslt_Ssis - Fatal编程技术网

SSIS XML任务中的XSLT转换,仅输出XML文档的某些节点

SSIS XML任务中的XSLT转换,仅输出XML文档的某些节点,xml,xslt,ssis,Xml,Xslt,Ssis,给定以下XML文档 <?xml version="1.0" encoding="UTF-8"?> <TrainingCenterDatabase xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:ns5="http://www.

给定以下XML文档

<?xml version="1.0" encoding="UTF-8"?>
<TrainingCenterDatabase
  xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd"
  xmlns:ns5="http://www.garmin.com/xmlschemas/ActivityGoals/v1"
  xmlns:ns3="http://www.garmin.com/xmlschemas/ActivityExtension/v2"
  xmlns:ns2="http://www.garmin.com/xmlschemas/UserProfile/v2"
  xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns4="http://www.garmin.com/xmlschemas/ProfileExtension/v1">
  <Activities>
    <Activity Sport="Other">
      <Id>2017-01-13T19:26:50.000Z</Id>
      <Lap StartTime="2017-01-13T19:26:50.000Z">
        <TotalTimeSeconds>600.0</TotalTimeSeconds>
        <DistanceMeters>0.0</DistanceMeters>
        <Calories>42</Calories>
        <AverageHeartRateBpm>
          <Value>89</Value>
        </AverageHeartRateBpm>
        <MaximumHeartRateBpm>
          <Value>100</Value>
        </MaximumHeartRateBpm>
        <Intensity>Active</Intensity>
        <TriggerMethod>Manual</TriggerMethod>
        <Track>
          <Trackpoint>
            <Time>2017-01-13T19:26:50.000Z</Time>
            <AltitudeMeters>-51.599998474121094</AltitudeMeters>
            <HeartRateBpm>
              <Value>84</Value>
            </HeartRateBpm>
            <Extensions>
              <ns3:TPX/>
            </Extensions>
          </Trackpoint>
          <Trackpoint>
            <Time>2017-01-13T19:26:51.000Z</Time>
            <AltitudeMeters>-51.599998474121094</AltitudeMeters>
            <HeartRateBpm>
              <Value>84</Value>
            </HeartRateBpm>
            <Extensions>
              <ns3:TPX/>
            </Extensions>
          </Trackpoint>
          <Trackpoint>
            <Time>2017-01-13T19:26:54.000Z</Time>
            <AltitudeMeters>-0.6000000238418579</AltitudeMeters>
            <HeartRateBpm>
              <Value>84</Value>
            </HeartRateBpm>
            <Extensions>
              <ns3:TPX/>
            </Extensions>
          </Trackpoint>
        </Track>
        <Extensions>
          <ns3:LX/>
        </Extensions>
      </Lap>
      <Creator xsi:type="Device_t">
        <Name>Garmin Forerunner 910XT</Name>
        <UnitId>3881635667</UnitId>
        <ProductID>1328</ProductID>
        <Version>
          <VersionMajor>3</VersionMajor>
          <VersionMinor>20</VersionMinor>
          <BuildMajor>0</BuildMajor>
          <BuildMinor>0</BuildMinor>
        </Version>
      </Creator>
    </Activity>
  </Activities>
  <Author xsi:type="Application_t">
    <Name>Garmin Connect API</Name>
    <Build>
      <Version>
        <VersionMajor>16</VersionMajor>
        <VersionMinor>23</VersionMinor>
        <BuildMajor>0</BuildMajor>
        <BuildMinor>0</BuildMinor>
      </Version>
    </Build>
    <LangID>en</LangID>
    <PartNumber>006-D2449-00</PartNumber>
  </Author>
</TrainingCenterDatabase>

2017-01-13T19:26:50.000Z
600
0
42
89
100
活跃的
手册
2017-01-13T19:26:50.000Z
-51.599998474121094
84
2017-01-13T19:26:51.000Z
-51.599998474121094
84
2017-01-13T19:26:54.000Z
-0.6000000238418579
84
加明先导910XT
3881635667
1328
3.
20
0
0
Garmin连接API
16
23
0
0
EN
006-D2449-00
以及下面的XSLT。(我一直在尝试各种不同的版本,但我甚至无法让它导出任何内容)


我正在竭尽全力只导出XML的某些节点

编辑。从XML中添加到名称空间中。 编辑在名称空间和别名中添加

我想要的是这个

  <Trackpoint>
    <Time>2017-01-13T19:26:54.000Z</Time>
    <HeartRateBpm>84</HeartRateBpm>
  </Trackpoint>
  <Trackpoint>
    <Time>2017-01-13T19:26:54.000Z</Time>
    <HeartRateBpm>84</HeartRateBpm>
  </Trackpoint>
  <Trackpoint>
    <Time>2017-01-13T19:27:54.000Z</Time>
    <HeartRateBpm>85</HeartRateBpm>
  </Trackpoint>
  <Trackpoint>
    <Time>2017-01-13T19:28:54.000Z</Time>
    <HeartRateBpm>90</HeartRateBpm>
  </Trackpoint>
  etc.

2017-01-13T19:26:54.000Z
84
2017-01-13T19:26:54.000Z
84
2017-01-13T19:27:54.000Z
85
2017-01-13T19:28:54.000Z
90
等

非常感谢您的帮助。

您当前的尝试失败有两个原因:

  • 输入XML使用的默认名称空间是
    ”http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2“
    ,而不是
    ”http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd“
    as 您正在样式表中声明

  • 指向
    轨迹
    元素的路径不正确-您错过了
    Lap
    步骤

  • 修复这两个将得到一个结果,它是
    Track
    元素的深度副本

    但是,我怀疑这是您想要的结果,因为它将按原样复制—包括默认名称空间。为了得到不在名称空间中的结果,您需要创建新元素,而不是从源代码复制。试试看,例如:

    XSLT1.0

    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:gar="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"
    exclude-result-prefixes="gar">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
    <xsl:template match="/gar:TrainingCenterDatabase">
        <Track>
            <xsl:for-each select="gar:Activities/gar:Activity/gar:Lap/gar:Track/gar:Trackpoint">
                <Trackpoint>
                    <Time>
                        <xsl:value-of select="gar:Time"/>                   
                    </Time>
                    <HeartRateBpm>
                        <xsl:value-of select="gar:HeartRateBpm/gar:Value"/>
                    </HeartRateBpm>
                </Trackpoint>
            </xsl:for-each>
        </Track>
    </xsl:template>
    
    </xsl:stylesheet>
    
    
    
    应用于输入示例,结果将是:

    <?xml version="1.0" encoding="UTF-8"?>
    <Track>
       <Trackpoint>
          <Time>2017-01-13T19:26:50.000Z</Time>
          <HeartRateBpm>84</HeartRateBpm>
       </Trackpoint>
       <Trackpoint>
          <Time>2017-01-13T19:26:51.000Z</Time>
          <HeartRateBpm>84</HeartRateBpm>
       </Trackpoint>
       <Trackpoint>
          <Time>2017-01-13T19:26:54.000Z</Time>
          <HeartRateBpm>84</HeartRateBpm>
       </Trackpoint>
    </Track>
    
    
    2017-01-13T19:26:50.000Z
    84
    2017-01-13T19:26:51.000Z
    84
    2017-01-13T19:26:54.000Z
    84
    
    当前尝试失败的原因有两个:

  • 输入XML使用的默认名称空间是
    ”http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2“
    ,而不是
    ”http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd“
    as 您正在样式表中声明

  • 指向
    轨迹
    元素的路径不正确-您错过了
    Lap
    步骤

  • 修复这两个将得到一个结果,它是
    Track
    元素的深度副本

    但是,我怀疑这是您想要的结果,因为它将按原样复制—包括默认名称空间。为了得到不在名称空间中的结果,您需要创建新元素,而不是从源代码复制。试试看,例如:

    XSLT1.0

    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:gar="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"
    exclude-result-prefixes="gar">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
    <xsl:template match="/gar:TrainingCenterDatabase">
        <Track>
            <xsl:for-each select="gar:Activities/gar:Activity/gar:Lap/gar:Track/gar:Trackpoint">
                <Trackpoint>
                    <Time>
                        <xsl:value-of select="gar:Time"/>                   
                    </Time>
                    <HeartRateBpm>
                        <xsl:value-of select="gar:HeartRateBpm/gar:Value"/>
                    </HeartRateBpm>
                </Trackpoint>
            </xsl:for-each>
        </Track>
    </xsl:template>
    
    </xsl:stylesheet>
    
    
    
    应用于输入示例,结果将是:

    <?xml version="1.0" encoding="UTF-8"?>
    <Track>
       <Trackpoint>
          <Time>2017-01-13T19:26:50.000Z</Time>
          <HeartRateBpm>84</HeartRateBpm>
       </Trackpoint>
       <Trackpoint>
          <Time>2017-01-13T19:26:51.000Z</Time>
          <HeartRateBpm>84</HeartRateBpm>
       </Trackpoint>
       <Trackpoint>
          <Time>2017-01-13T19:26:54.000Z</Time>
          <HeartRateBpm>84</HeartRateBpm>
       </Trackpoint>
    </Track>
    
    
    2017-01-13T19:26:50.000Z
    84
    2017-01-13T19:26:51.000Z
    84
    2017-01-13T19:26:54.000Z
    84
    
    看起来您在名称空间方面遇到了问题。答案可能会有所帮助。我用名称空间更新了XLST。当我在select的副本中使用“*”时,它会起作用。但是,任何时候我都要更改它以查找其他nada。您需要使用前缀-请参阅:注意,XML(以及随后的样式表)中的大多数命名空间声明都是未使用的,因此是多余的。-还要注意的是,您显示的输出不是格式良好的XML(没有单个根元素)?我加了前缀,什么也没加。感谢关于格式良好的xml的说明。一旦我让它实际导出一些东西,我就会解决这个问题:-)看起来您在名称空间方面遇到了问题。答案可能会有所帮助。我用名称空间更新了XLST。当我在select的副本中使用“*”时,它会起作用。但是,任何时候我都要更改它以查找其他nada。您需要使用前缀-请参阅:注意,XML(以及随后的样式表)中的大多数命名空间声明都是未使用的,因此是多余的。-还要注意的是,您显示的输出不是格式良好的XML(没有单个根元素)?我加了前缀,什么也没加。感谢关于格式良好的xml的说明。一旦我让它实际导出一些东西,我将修复它:-)