2011-09-08 40 views
1

我有以下的xsd:如何使用Delphi与MsXML6获取模式中的所有元素?

<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中做到这一点。提前致谢。

回答

0

您还必须为oSchema.types编写一个循环,因为booktype显然是一种类型(或准确地说是complexType),而不是和元素。