SSIS разделить текст XML - PullRequest
       17

SSIS разделить текст XML

1 голос
/ 28 февраля 2012

Мне интересно, есть ли кто-нибудь, кто может помочь мне достичь следующего. У меня есть XML-файл с текстовым значением, содержащим для каждой недели значение. Я хотел бы каждую неделю помещать в базу данных в виде отдельной строки.

Я знаю, как поместить файлы XML в базу данных, используя SSIS, но мне нужна помощь, чтобы начать разбивать текстовое значение.

Большое спасибо!

<DATA>
<TIME-SERIES last-update-time="507340800" name="yearly" sample-interval="604800" observations="52" parent="http:client-volume">143 161 175 112 176 191 188 163 268 303 261 270 264 182 318 307 339 310 328 338 407 485 3330 274 168 191 179 258 183 256 258 238 2625 235 305 274 255 273 367 188 318 230 315 278 192 222 1268 129 150 350 3278 4757 </TIME-SERIES>
</DATA>

предпочтительный вывод

date      | name   | interval | observation | parent             | value
507340800 | yearly | 604800   | 52          | http:client-volume | 143
507340800 | yearly | 604800   | 52          | http:client-volume | 161
507340800 | yearly | 604800   | 52          | http:client-volume | 175

1 Ответ

0 голосов
/ 29 февраля 2012

Как насчет написания небольшого фрагмента xsl для этого? Вот тот, который я придумал, запустить с: xsltproc MY_XSL_FILE YOUR_XML_FILE

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:s="http://exslt.org/strings"
  version="1.0">

  <xsl:output method="text"/>

  <xsl:template match="text()"/>

  <xsl:template match="TIME-SERIES">
    <xsl:variable name="last-update-time" select="@last-update-time"/>
    <xsl:variable name="name" select="@name"/>
    <xsl:variable name="sample-interval" select="@sample-interval"/>
    <xsl:variable name="observations" select="@observations"/>
    <xsl:variable name="parent" select="@parent"/>

    <!-- heading -->
    <xsl:text>date      | name   | interval | observation | parent             | value&#0010;</xsl:text>

    <xsl:for-each select="s:tokenize(text(), ' ')">
      <xsl:value-of select="$last-update-time"/>
      <xsl:text> | </xsl:text>
      <xsl:value-of select="$name"/>
      <xsl:text> | </xsl:text>
      <xsl:value-of select="$sample-interval"/>
      <xsl:text>  | </xsl:text>
      <xsl:value-of select="$observations"/>
      <xsl:text>           | </xsl:text>
      <xsl:value-of select="$parent"/>
      <xsl:text> | </xsl:text>
      <xsl:value-of select="."/>
      <xsl:text>&#0010;</xsl:text>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>
...