2010-09-27 29 views
2

Pour un document qui a une déclaration de DOCTPYE commeComment puis-je lire l'identificateur DOCTYPE SYSTEM avec Delphi?

<!DOCTYPE RootElement SYSTEM "file.dtd"> 

Delphi 2009, en utilisant MSXML, rapporte que le systemId est vide (""):

Assert(Doc.DOMDocument.doctype.systemId <> ''); // fails! 

tout

Assert(Doc.DOMDocument.doctype.name = 'RootElement'); // ok 

vérifie correctement que l'ID de nom DOCTYPE "RootElement".

Est-ce un bug dans Delphi (ou mon code) ou est-ce que j'utilise une version de MSXML qui ne supporte pas cette propriété?

Répondre

1

L'implémentation DocumentType de MSXML ne contient pas les propriétés DocumentType publicId, systemId et internalSubset. MSDN api ref; les propriétés manquantes sont explicitement appelées MS-DOM2CX.

Si vous avez besoin de ces informations, vous devrez peut-être essayer une implémentation DOM différente. Voici one. Si vous pouvez utiliser des classes .NET, System.Xml le prend également en charge.

0

Dans le cas où la propriété ProhibitDTD est True, définissez-la sur False. Il s'agit d'un article avec plus de détails.