Попытка конвертировать XML в CSV с использованием XSL - PullRequest
1 голос
/ 23 марта 2012

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

<?xml version="1.0" encoding="windows-1250"?>
<VarList active="1">
  <Var exclude="0" ID="0" Name="V_Width"/>
  <Var exclude="0" ID="2" Name="V_Depth"/>
  <Var exclude="0" ID="1" Name="V_Height"/>
</VarList>

Экспортированные данные XML, предоставленные на основе моего пользовательского XML, выглядят следующим образом:

<?xml version="1.0" encoding="utf-16"?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Project.xsd" Name="Job">
  <Version>1</Version>
  <ContentID>1</ContentID>
  <Source>
    <Name>
      <![CDATA[2020 Design]]></Name>
      <BuildVersion>
        <![CDATA[V: 8.1.3072, Build_81_3072]]></BuildVersion>
        <ComputerName>L61795</ComputerName>
      </Source>
      <SendSize>000000000</SendSize>
      <Priority>N</Priority>
      <Design>
        <CheckSum>1092308776</CheckSum>
        <Document>
          <DocType>kitchen</DocType>
          <FilePath>
            <![CDATA[C:\Users\percival_a\Documents\2020 Files\D001_20120323_5.kit]]></FilePath>
            <FileName>
              <![CDATA[D001_20120323_5]]></FileName>
            </Document>
            <JobInfo>
              <FileName>
                <![CDATA[C:\Users\percival_a\Documents\2020 Files\D001_20120323_5.kit]]></FileName>
              </JobInfo>
              <Catalog>
                <Identification>
                  <Name>KITMANIA</Name>
                  <Description>
                    <![CDATA[Kitchen Mania Catalogue]]></Description>
                    <CurrencyName>USD</CurrencyName>
                    <CreationDate>
                      <![CDATA[2011/09/20 00:00:00]]></CreationDate>
                      <ModificationDate>
                        <![CDATA[2012/02/20 14:42:26]]></ModificationDate>
                        <MeasurementUnit>Metric</MeasurementUnit>
                        <Profile>
                          <Name>
                            <![CDATA[Kitchen Mania]]></Name>
                          </Profile>
                          <CatalogHasStyle>0</CatalogHasStyle>
                        </Identification>
                        <Material ID="IDM-1-2605-95005">
                          <Name>White</Name>
                          <Grain>N</Grain>
                          <Thickness>0</Thickness>
                        </Material>
                        <Material ID="IDM-1-2605-8045">
                          <Name>
                            <![CDATA[Metal - Stainless Steel]]></Name>
                            <Grain>N</Grain>
                            <Thickness>0</Thickness>
                          </Material>
                          <FeatureSet ID="IDFS-1" Type="Style">
                            <Code>
                              <![CDATA[1]]></Code>
                              <Description>
                                <![CDATA[Price Level 1]]></Description>
                              </FeatureSet>
                              <Item ID="IDI-1-18">
                                <CheckSum>1092308776</CheckSum>
                                <IsValid>1</IsValid>
                                <UserCode>B400L</UserCode>
                                <LinkCode></LinkCode>
                                <ManufCode>B400</ManufCode>
                                <Description>
                                  <![CDATA[Base cabinet single door ]]></Description>
                                  <Class>111</Class>
                                  <Instance>Standard</Instance>
                                  <ItemTypeName>Cabinets</ItemTypeName>
                                  <ItemType>0</ItemType>
                                  <SubTypeName>Base</SubTypeName>
                                  <SubType>0</SubType>
                                  <ChargeType>0</ChargeType>
                                  <EOType>-1</EOType>
                                  <IsCorner>0</IsCorner>
                                  <IsPlaced>1</IsPlaced>
                                  <IsCustom>0</IsCustom>
                                  <IsWallMounted>0</IsWallMounted>
                                  <IsFloorstanding>1</IsFloorstanding>
                                  <Finish>Both</Finish>
                                  <Hinge>Left</Hinge>
                                  <Quantity>1</Quantity>
                                  <IsForeign>0</IsForeign>
                                  <HasForeign>0</HasForeign>
                                  <Price Type="Cost" Mode="Fixed" Level="1">
                                    <Value>129</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="List" Mode="Fixed" Level="1">
                                    <Value>129</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="Retail" Mode="Fixed" Level="1">
                                    <Value>129</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="Cost" Mode="Fixed" Level="2">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="List" Mode="Fixed" Level="2">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="Retail" Mode="Fixed" Level="2">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="Cost" Mode="Fixed" Level="3">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="List" Mode="Fixed" Level="3">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="Retail" Mode="Fixed" Level="3">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="Cost" Mode="Fixed" Level="4">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="List" Mode="Fixed" Level="4">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <Price Type="Retail" Mode="Fixed" Level="4">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </Price>
                                  <PriceQuantity Type="Cost" Mode="Fixed" Level="1">
                                    <Value>129</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="List" Mode="Fixed" Level="1">
                                    <Value>129</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="Retail" Mode="Fixed" Level="1">
                                    <Value>129</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="Cost" Mode="Fixed" Level="2">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="List" Mode="Fixed" Level="2">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="Retail" Mode="Fixed" Level="2">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="Cost" Mode="Fixed" Level="3">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="List" Mode="Fixed" Level="3">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="Retail" Mode="Fixed" Level="3">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="Cost" Mode="Fixed" Level="4">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="List" Mode="Fixed" Level="4">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <PriceQuantity Type="Retail" Mode="Fixed" Level="4">
                                    <Value>0</Value>
                                    <FormattedValue></FormattedValue>
                                  </PriceQuantity>
                                  <ZoneID>-1</ZoneID>
                                  <AbsolutePos x="164800" y="234800" z="12000"></AbsolutePos>
                                  <Direction>0</Direction>
                                  <NormDir>1</NormDir>
                                  <Var ID="0" Type="Dim">
                                    <Value>400</Value>
                                    <Name>Width</Name>
                                  </Var>
                                  <Var ID="1" Type="Dim">
                                    <Value>720</Value>
                                    <Name>Height</Name>
                                  </Var>
                                  <Var ID="2" Type="Dim">
                                    <Value>562</Value>
                                    <Name>Depth</Name>
                                  </Var>
                                  <FeatureSetRef>IDFS-1</FeatureSetRef>
                                  <LineItemNumber>1</LineItemNumber>
                                </Item>
                                <Pricing>
                                  <GroupTotal Group="Catalog">
                                    <Reference>
                                      <![CDATA[KITMANIA]]></Reference>
                                      <Name/>
                                      <Total>
                                        <BeforeTax>1</BeforeTax>
                                        <Net>0</Net>
                                        <Description>
                                          <![CDATA[KITMANIA total]]></Description>
                                          <Price Type="Retail" Mode="Sum" Level="1">
                                            <Value>129</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                          <Price Type="Retail" Mode="Sum" Level="2">
                                            <Value>0</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                          <Price Type="Retail" Mode="Sum" Level="3">
                                            <Value>0</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                          <Price Type="Retail" Mode="Sum" Level="4">
                                            <Value>0</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                        </Total>
                                        <Total>
                                          <BeforeTax>1</BeforeTax>
                                          <Net>1</Net>
                                          <Description>
                                            <![CDATA[KITMANIA net total]]></Description>
                                            <Price Type="Retail" Mode="Sum" Level="1">
                                              <Value>129</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="2">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="3">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="4">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                          </Total>
                                        </GroupTotal>
                                        <GroupTotal Group="ItemType">
                                          <Reference>Cabinets</Reference>
                                          <GroupReference>0</GroupReference>
                                          <Total>
                                            <BeforeTax>1</BeforeTax>
                                            <Net>0</Net>
                                            <Description>Cabinets total</Description>
                                            <Price Type="Retail" Mode="Sum" Level="1">
                                              <Value>129</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="2">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="3">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="4">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                          </Total>
                                          <Total>
                                            <BeforeTax>1</BeforeTax>
                                            <Net>1</Net>
                                            <Description>Cabinets net total</Description>
                                            <Price Type="Retail" Mode="Sum" Level="1">
                                              <Value>129</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="2">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="3">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="4">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                          </Total>
                                        </GroupTotal>
                                        <GroupTotal Group="ChargeType">
                                          <Reference>Premium</Reference>
                                          <GroupReference>1</GroupReference>
                                          <Total>
                                            <BeforeTax>1</BeforeTax>
                                            <Description>Premium total</Description>
                                            <Price Type="Retail" Mode="Sum" Level="1">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="2">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="3">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="4">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                          </Total>
                                        </GroupTotal>
                                        <GroupTotal Group="ItemSubType">
                                          <Reference>Charges</Reference>
                                          <GroupReference>4</GroupReference>
                                          <Total>
                                            <BeforeTax>1</BeforeTax>
                                            <Description>Charges total</Description>
                                            <Price Type="Retail" Mode="Sum" Level="1">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="2">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="3">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                            <Price Type="Retail" Mode="Sum" Level="4">
                                              <Value>0</Value>
                                              <FormattedValue></FormattedValue>
                                            </Price>
                                          </Total>
                                        </GroupTotal>
                                      </Pricing>
                                      <TotalWeight>0</TotalWeight>
                                      <TotalVolume>0</TotalVolume>
                                    </Catalog>
                                    <Pricing>
                                      <CurrencyCode></CurrencyCode>
                                      <GroupTotal Group="Design">
                                        <Total>
                                          <BeforeTax>1</BeforeTax>
                                          <Net>0</Net>
                                          <Description>Design total</Description>
                                          <Price Type="Retail" Mode="Sum" Level="1">
                                            <Value>129</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                          <Price Type="Retail" Mode="Sum" Level="2">
                                            <Value>0</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                          <Price Type="Retail" Mode="Sum" Level="3">
                                            <Value>0</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                          <Price Type="Retail" Mode="Sum" Level="4">
                                            <Value>0</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                        </Total>
                                        <Total>
                                          <BeforeTax>0</BeforeTax>
                                          <Net>1</Net>
                                          <Description>Design net total</Description>
                                          <Price Type="Retail" Mode="Sum" Level="1">
                                            <Value>129</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                          <Price Type="Retail" Mode="Sum" Level="2">
                                            <Value>0</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                          <Price Type="Retail" Mode="Sum" Level="3">
                                            <Value>0</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                          <Price Type="Retail" Mode="Sum" Level="4">
                                            <Value>0</Value>
                                            <FormattedValue></FormattedValue>
                                          </Price>
                                        </Total>
                                      </GroupTotal>
                                    </Pricing>
                                  </Design>
                                </Project>

Я только что отредактировал свой вопрос, извините, очень новый для этого.Однако интересующая область (содержимое Var):

<Var ID="0" Type="Dim">
    <Value>400</Value>
    <Name>Width</Name>
</Var>
<Var ID="1" Type="Dim">
    <Value>720</Value>
    <Name>Height</Name>
</Var>
<Var ID="2" Type="Dim">
    <Value>562</Value>
    <Name>Depth</Name>
</Var>

Здесь я хочу, чтобы XSL (как можно указать в приложении) преобразовал это в формат CSV:

Width   Height  Depth
400 720 562

Я могу использовать несколько XSL, чтобы перейти в альтернативный формат XML до формата CSV - как я смотрел на другие вопросы и ответы по stackoverflow;и подозреваю, что это может потребоваться заранее.

В прошлом использовался XmlToCsvConverter, где формат CSV требует некоторого внимания.

Буду признателен за любую помощь, так как я только заканчиваю свой путь- и подозреваю, что для опытного программиста это будет прогулка в парке.С уважением

1 Ответ

3 голосов
/ 23 марта 2012

Хотя немного неясно, каковы точные требования или если это лучший подход, вот, например, фрагмент XSLT, который преобразует XML, который вы показываете выше, в одну строку CSV, как ваш пример вывода.Без более полного примера, скажем, нескольких строк, трудно обобщить решение (также ваш пример экспортированных данных XML искажен, поскольку в нем отсутствует корневой элемент):

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
  <xsl:for-each select="//Var">
    <xsl:value-of select="Name" /><xsl:text> </xsl:text>
  </xsl:for-each><xsl:text>
</xsl:text>
  <xsl:for-each select="//Var">
    <xsl:value-of select="Value" /><xsl:text> </xsl:text>
  </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Вот инструмент, который я использовал для тестирования: http://xslttest.appspot.com/, с использованием следующих слегка измененных данных XML (добавлен корневой элемент):

<Vars>
    <Var ID="0" Type="Dim">
        <Value>400</Value>
        <Name>Width</Name>
    </Var>
    <Var ID="1" Type="Dim">
        <Value>720</Value>
        <Name>Height</Name>
    </Var>
    <Var ID="2" Type="Dim">
        <Value>562</Value>
        <Name>Depth</Name>
    </Var>
</Vars>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...