Форум: "Основная";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
ВнизSchema Object Model Найти похожие ветки
← →
meirman (2003-09-24 17:31) [0]проблема при работе с xml-схемами через Schema Object Model
который реализованный в msxml4.
Конкретно проблема с доступом к содержимому сложного типа
///
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MSXML2_TLB,ComObj,OleServer;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,x:integer;
doc1:IXMLDOMDocument2;
nsTarget:widestring;
ixxi:IXMLDOMNode;
is1:ISchema;
schema1:XMLSchemaCache40;
itp1:ISchemaType;
isi1:ISchemaItem;
isct1:ISchemaComplexType;
isic1:ISchemaItemCollection;
cer:ISchemaModelGroup;
begin
schema1:=CreateOleObject("Msxml2.XMLSchemaCache.4.0") as XMLSchemaCache40;//IXMLDOMSchemaCollection2;
nsTarget:="tgtns";
schema1.add(nsTarget,"sch1.xsd ");
is1:=schema1.getSchema(nsTarget);
for i:=0 to is1.types.length-1 do
memo1.Lines.Add(is1.types.item[i].name+" "+IntToStr(i));
itp1:=is1.types.item[0] as ISchemaType;
if itp1.itemType=SOMITEM_COMPLEXTYPE then
begin
isct1:=itp1 as ISchemaComplexType;
if isct1.contentType=SCHEMACONTENTTYPE_ELEMENTONLY then
begin
x:=isct1.contentModel.particles.length; //Здесь выдается ошибка : "Неопознанная ошибка"
end;
end;
end;
end.
-------------------
сама xml-схема
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 2 U ( http://www.xmlspy.com) by Mustafa (Bimash) -->
<xs:schema targetNamespace="tgtns" xmlns:tg="tgtns" xmlns:xs=" http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="XXX" type="tg:CTP"/>
<xs:complexType name="CTP">
<xs:sequence>
<xs:element name="ytyt" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
← →
Jao (2003-09-27 10:09) [1]1. Узнаем namespaceURI этого нужного типа
2. Проверяем добавлен ли этот URI в schema1, если нет - добавляем
3. Затем к этому элементу запос типа:
nlist:=schema1.get(namespaceURI).selectNodes("/*/*[@name=""+typename+""]/*");
4. По результатам запроса получаем Dom-содержимое данного типа и разбираем его в ручную, иначе никак :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c