Ver Mensaje Individual
  #1  
Antiguo 22-06-2012
Avatar de M.L.Casellas
M.L.Casellas M.L.Casellas is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 23
Reputación: 0
M.L.Casellas Va por buen camino
Post XML, Nodos, subnodos, y más subnodos...¿Cómo leerlos? Me sale en blanco....

Hola;
Llevo un par de días aprendiendo sobre ficheros .xml (después de estudiar previamente html y xhtml) y he conseguido hacer algún ejemplo y leer fichero .xml creado por mi a mono con el notepad.
Pero……todo esto era para leer un .xml que recibo de una llamada por http. Pues el fichero que recibo como respuesta no doy con la forma de extraer los datos que me interesan.
Tengo que decir que buscando info encontré en más de un sitio la el mismo tutorial de como meter un xml en un ClientDataSet y a mi no me funciona. En los ejemplos veo que insertan un ClientDataSet, DataSource y un DBGrid y ¡a volar! Pero a mi me pide algo así como provider….en fin.
Volviendo al tema principal de mi problema: El .xml que obtengo después de la llamada por http, lo guardo con codificación UTF-8. Y se guarda correctamente, lo abro con IE, Firefox….todo bien. Pero desde Delphi, no me sale nada. No da error, pero el dato en blanco.
Pego aquí un xml de respuesta al completo. Se trata de un único registro, pues es la ficha de un ISBN (de un libro):
Código:
<?xml version="1.0" encoding="UTF-8" ?>
<getRecordsXResponse xmlns="http://www.dilve.es/dilve/api/xsd/getRecordsXResponse" version="1.2">
<ONIXMessage 
      xmlns="http://www.editeur.org/onix/2.1/reference"
>
 <Header>
  <FromCompany>DILVE</FromCompany>
  <SentDate>20120621</SentDate>
 </Header>
 <Product>
  <RecordReference>9788431539474</RecordReference>
  <NotificationType>03</NotificationType>
  <ProductIdentifier>
   <ProductIDType>03</ProductIDType>
   <IDValue>9788431539474</IDValue>
  </ProductIdentifier>
  <ProductForm>BC</ProductForm>
  <ProductFormDescription></ProductFormDescription>
  <Series>
   <Title>
    <TitleType>01</TitleType>
    <TitleText>Desarrollo profesional</TitleText>
   </Title>
   <NumberWithinSeries>Profesional</NumberWithinSeries>
  </Series>
  <Title>
   <TitleType>01</TitleType>
   <TitleText>Curso rápido para desarrollar la memoria</TitleText>
  </Title>
  <Title>
   <TitleType>10</TitleType>
   <TitleText>Curso rápido para desarrollar la memoria</TitleText>
  </Title>
  <Contributor>
   <ContributorRole>A01</ContributorRole>
   <PersonNameInverted>Tresoldi, Roberto</PersonNameInverted>
  </Contributor>
  <Language>
   <LanguageRole>01</LanguageRole>
   <LanguageCode>spa</LanguageCode>
  </Language>
  <NumberOfPages>128</NumberOfPages>
  <MainSubject>
   <MainSubjectSchemeIdentifier>12</MainSubjectSchemeIdentifier>
   <SubjectSchemeVersion>2.1</SubjectSchemeVersion>
   <SubjectCode>VS</SubjectCode>
   <SubjectHeadingText>AUTOAYUDA Y DESARROLLO PERSONAL</SubjectHeadingText>
  </MainSubject>
  <Subject>
   <SubjectSchemeIdentifier>12</SubjectSchemeIdentifier>
   <SubjectSchemeVersion>2.1</SubjectSchemeVersion>
   <SubjectCode>VS</SubjectCode>
   <SubjectHeadingText>AUTOAYUDA Y DESARROLLO PERSONAL</SubjectHeadingText>
 
  </Subject>
  <Subject>
   <SubjectSchemeIdentifier>51</SubjectSchemeIdentifier>
   <SubjectCode>159.9</SubjectCode>
   <SubjectHeadingText>Psicología.</SubjectHeadingText>
 
  </Subject>
  <AudienceCode>01</AudienceCode>
  <OtherText>
   <TextTypeCode>01</TextTypeCode>
   <TextFormat>06</TextFormat>
   <Text language="spa">Vivimos en una época en la que estamos sometidos a un continuo bombardeo mediático e informático que ha revolucionado el concepto......</Text>
  </OtherText>
  <OtherText>
   <TextTypeCode>01</TextTypeCode>
   <TextFormat>06</TextFormat>
   <Text language="spa">Roberto Tresoldi, licenciado en Letras por la Universidad Católica de Milán, ha trabajado en el sector de la información, las relaciones públicas, la publicidad, la organización de congresos y la formación para algunas grandes empresas internacionales. Políglota (conoce más de diez lenguas modernas y varias lenguas antiguas), es autor de obras y artículos sobre la historia de la cultura, ha estudiado el tema de la memoria experimentando diversas técnicas de memorización en empresas, cursos, brainstormings y conferencias.</Text>
  </OtherText>
  <MediaFile>
   <MediaFileTypeCode>04</MediaFileTypeCode>
   <MediaFileLinkTypeCode>01</MediaFileLinkTypeCode>
   <MediaFileLink>http://www.edhasa.com.ar/temp/1000/9788431539474.jpg</MediaFileLink>
  </MediaFile>
  <Publisher>
   <NameCodeType>02</NameCodeType>
   <NameCodeTypeName>DILVE_PUBLID</NameCodeTypeName>
   <NameCodeValue>DLV00011981</NameCodeValue>
   <PublisherName>DE VECCHI EDICIONES, S.A.</PublisherName>
  </Publisher>
  <CityOfPublication>Barcelona</CityOfPublication>
  <CountryOfPublication>ES</CountryOfPublication>
  <PublishingStatus>04</PublishingStatus>
  <PublicationDate>20080930</PublicationDate>
  <Measure>
   <MeasureTypeCode>01</MeasureTypeCode>
   <Measurement>205</Measurement>
   <MeasureUnitCode>mm</MeasureUnitCode>
  </Measure>
  <Measure>
   <MeasureTypeCode>02</MeasureTypeCode>
   <Measurement>145</Measurement>
   <MeasureUnitCode>mm</MeasureUnitCode>
  </Measure>
  <SupplyDetail>
   <SupplierName>DE VECCHI EDICIONES, S.A.</SupplierName>
   <SupplierRole>01</SupplierRole>
   <SupplyToCountry>ES</SupplyToCountry>
   <ProductAvailability>20</ProductAvailability>
   <Price>
    <PriceTypeCode>04</PriceTypeCode>
    <PriceAmount>15.90</PriceAmount>
    <CurrencyCode>EUR</CurrencyCode>
    <TaxRateCode1>R</TaxRateCode1>
    <TaxRatePercent1>4.0</TaxRatePercent1>
    <TaxableAmount1>15.2885</TaxableAmount1>
   </Price>
  </SupplyDetail>
 </Product>
</ONIXMessage>
</getRecordsXResponse>
Los datos (nodos, ¿verdad?) que quiero extraer son el Título, Autor, Editorial y Pvp. Pero es que este .xml tiene más subnodos de los que he visto en toda la información que he estudiado (por ejemplo: http://delphiallimite.blogspot.com.e...os-xml-ii.html). Y no consigo, no se como manejar los nodos. Por ejemplo, editorial es "Publisher", pero dentro de este nodo hay dos nodos que quisiera extraer: NameCodeValue y PublisherName.
Un saludo, y gracias...
Miguel