Как получить все элементы в схеме, используя Delphi с MsXML6? - PullRequest
1 голос
/ 08 сентября 2011

У меня есть следующий xsd:

<xs:schema xmlns="urn:bookroom-schema" targetNamespace="urn:bookstore-schema"

xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="book" type="xs:string" />

  <xs:complexType name="booktype">
    <xs:sequence>
      <xs:element name="author" type="xs:string" />
      <xs:element name="title" type="xs:string" />
      <xs:element name="price" type="xs:decimal" />
    </xs:sequence>
  </xs:complexType>`

  <xs:element name="publisher" type="xs:string" />
</xs:schema>

Это программа.

procedure TForm1.AllElementsinSchema;

var oSchemaCache : XMLSchemaCache60;
    oSchema : ISchema;
    nsTarget: widestring;
    kk : integer;

begin
    oSchemaCache := coXMLSchemaCache60.Create;
    nsTarget := 'urn:bookstore-schema';
    oSchemaCache.add(nsTarget,'c:\book.xsd');
    oSchema := oSchemaCache.getSchema(nsTarget);

    for kk := 0 to pred(oSchema.elements.length) do
       showmessage('elements[' + inttostr(kk) + '] : ' + oschema.elements.item[kk].name);

end;

Когда я запускаю программу, я получаю:

book
publisher    

Как я могу получить это (все элементы, включая подэлементы)?

book
author
title
price
publisher    

Пожалуйста, объясните мне, как это сделать в Delphi.Заранее спасибо.

1 Ответ

0 голосов
/ 08 сентября 2011

Вы также должны написать цикл для oSchema.types, поскольку booktype, очевидно, является типом (или complexType, если быть точным), а не элементом.

...