如何使用带有MsXML6的Delphi获取模式中的所有元素?

时间:2011-09-08 04:39:02

标签: delphi msxml

我有以下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 :(得分:0)

你还必须为oSchema.types写一个循环,因为booktype显然是一个类型(或者complexType是确切的)而不是和元素。