xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

Transform XML to Data с несколькими записями в документе


Автор Сообщение
Enigmo
Новичок

Зарегистрирован: 07.05.2009
Сообщения: 2

[13763] Чт Май 07, 2009 12:54
Transform XML to Data с несколькими записями в документе
сть XML файл с такой структурой, нужно его трансформировать в 2 Data Packet-a.(Header.db, Records.db)

Код:


<Document-Order>
<Order-Header>
  <OrderNumber>TEST01</OrderNumber>
  <OrderDate>2003-08-20</OrderDate>
</Order-Header>

<Order-Lines>
  <Line>
    <Line-Item>
      <LineNumber>1</LineNumber>
      <EAN>1111111111111</EAN>
      <BuyerItemCode>123456</BuyerItemCode>
       <OrderedQuantity>23.000</OrderedQuantity>
      <UnitOfMeasure>KG</UnitOfMeasure>
      <TaxRate>20.00</TaxRate>     
    </Line-Item>
  </Line>
  <Line>
    <Line-Item>
      <LineNumber>2</LineNumber>
      <EAN>112222222111111</EAN>
      <BuyerItemCode>1000456</BuyerItemCode>
       <OrderedQuantity>77.000</OrderedQuantity>
      <UnitOfMeasure>KG</UnitOfMeasure>
      <TaxRate>20.00</TaxRate>     
    </Line-Item>
  </Line>
</Order-Lines>


Header трансформируется правильно, а Records - только 1 линию Sad Вот трансформация Records

Код:


<XmlTransformation Version="1.0">
<Transform Direction="ToCds" DataEncoding="UTF-8">
 <SelectEach dest="DATAPACKET\ROWDATA\ROW" from="\Document-Order">
   <Select dest="@OrderNumber" from="\Order-Header\OrderNumber"/>
   <Select dest="@LineNumber" from="\Order-Lines\Line\Line-Item\LineNumber"/>
   <Select dest="@EAN" from="\Order-Lines\Line\Line-Item\EAN"/>
   <Select dest="@BuyerItemCode" from="\Order-Lines\Line\Line-Item\BuyerItemCode"/>
   <Select dest="@ItemType" from="\Order-Lines\Line\Line-Item\ItemType"/>
   <Select dest="@OrderedQuantity" from="\Order-Lines\Line\Line-Item\OrderedQuantity"/>
 </SelectEach>
</Transform>


Примечание:
Файл трансформации делался XML Mapper в Delphi 7
Enigmo
Новичок

Зарегистрирован: 07.05.2009
Сообщения: 2

[13764] Чт Май 07, 2009 16:50

Без поля OrderNumber которое прописано в Header-е вытаскиваются все записи.
НО это поле необходимо т.к. входит в первичный ключ