Delphi 7,支持Unicode的XML处理

问题描述 投票:-1回答:5

我正在开发Delphi 7(个人版)。我曾经使用JvSimpleXML进行XML处理,但它似乎没有处理WideStrings(或者它呢?!)。我的整个项目使用TntWide ...和SpTBXLib作为接口,因此它可以很好地处理Unicode,我现在需要将一些设置存储在文件中......所以我正在寻找解决方案或(免费)替换JvSimpleXML ......任何想法?

在此先感谢michal

delphi unicode jvcl
5个回答
1
投票

结帐OmniXML。我已经开始使用它而不是msxml。它还为您提供非常光滑的'FluentXMLBuilder'。


4
投票

您可以使用从delphi导入dll的最新版本的qazxsw poi(Microsoft XML Core Services)。

MSXML 6

以下是生成代码的示例

编辑

位于XMLDoc.pas中的对象TXMLDocument(用于delphi 7)是MSXML 4或更少版本的包装器。

// *********************************************************************//
// Interface: IXMLDOMDocument
// Flags:     (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
// GUID:      {2933BF81-7B36-11D2-B20E-00C04F983E60}
// *********************************************************************//
  IXMLDOMDocument = interface(IXMLDOMNode)
    ['{2933BF81-7B36-11D2-B20E-00C04F983E60}']
    function Get_doctype: IXMLDOMDocumentType; safecall;
    function Get_implementation_: IXMLDOMImplementation; safecall;
    function Get_documentElement: IXMLDOMElement; safecall;
    procedure _Set_documentElement(const DOMElement: IXMLDOMElement); safecall;
    function createElement(const tagName: WideString): IXMLDOMElement; safecall;
    function createDocumentFragment: IXMLDOMDocumentFragment; safecall;
    function createTextNode(const data: WideString): IXMLDOMText; safecall;
    function createComment(const data: WideString): IXMLDOMComment; safecall;
    function createCDATASection(const data: WideString): IXMLDOMCDATASection; safecall;
    function createProcessingInstruction(const target: WideString; const data: WideString): IXMLDOMProcessingInstruction; safecall;
    function createAttribute(const name: WideString): IXMLDOMAttribute; safecall;
    function createEntityReference(const name: WideString): IXMLDOMEntityReference; safecall;
    function getElementsByTagName(const tagName: WideString): IXMLDOMNodeList; safecall;
    function createNode(type_: OleVariant; const name: WideString; const namespaceURI: WideString): IXMLDOMNode; safecall;
    function nodeFromID(const idString: WideString): IXMLDOMNode; safecall;
    function load(xmlSource: OleVariant): WordBool; safecall;
    function Get_readyState: Integer; safecall;
    function Get_parseError: IXMLDOMParseError; safecall;
    function Get_url: WideString; safecall;
    function Get_async: WordBool; safecall;
    procedure Set_async(isAsync: WordBool); safecall;
    procedure abort; safecall;
    function loadXML(const bstrXML: WideString): WordBool; safecall;
    procedure save(destination: OleVariant); safecall;
    function Get_validateOnParse: WordBool; safecall;
    procedure Set_validateOnParse(isValidating: WordBool); safecall;
    function Get_resolveExternals: WordBool; safecall;
    procedure Set_resolveExternals(isResolving: WordBool); safecall;
    function Get_preserveWhiteSpace: WordBool; safecall;
    procedure Set_preserveWhiteSpace(isPreserving: WordBool); safecall;
    procedure Set_onreadystatechange(Param1: OleVariant); safecall;
    procedure Set_ondataavailable(Param1: OleVariant); safecall;
    procedure Set_ontransformnode(Param1: OleVariant); safecall;
    property doctype: IXMLDOMDocumentType read Get_doctype;
    property implementation_: IXMLDOMImplementation read Get_implementation_;
    property documentElement: IXMLDOMElement read Get_documentElement write _Set_documentElement;
    property readyState: Integer read Get_readyState;
    property parseError: IXMLDOMParseError read Get_parseError;
    property url: WideString read Get_url;
    property async: WordBool read Get_async write Set_async;
    property validateOnParse: WordBool read Get_validateOnParse write Set_validateOnParse;
    property resolveExternals: WordBool read Get_resolveExternals write Set_resolveExternals;
    property preserveWhiteSpace: WordBool read Get_preserveWhiteSpace write Set_preserveWhiteSpace;
    property onreadystatechange: OleVariant write Set_onreadystatechange;
    property ondataavailable: OleVariant write Set_ondataavailable;
    property ontransformnode: OleVariant write Set_ontransformnode;
  end;

来自const { GUID's from MSXML2_TLB.pas } CLASS_DOMDocument26: TGUID = '{F5078F1B-C551-11D3-89B9-0000F81FE221}'; CLASS_DOMDocument30: TGUID = '{F5078F32-C551-11D3-89B9-0000F81FE221}'; CLASS_DOMDocument40: TGUID = '{88D969C0-F192-11D4-A65F-0040963251E5}'; function CreateDOMDocument: IXMLDOMDocument; begin Result := TryObjectCreate([CLASS_DOMDocument40, CLASS_DOMDocument30, CLASS_DOMDocument26, msxml.CLASS_DOMDocument]) as IXMLDOMDocument; if not Assigned(Result) then raise DOMException.Create(SMSDOMNotInstalled); end; 网站:

MSXML4是为了增加功能和提高性能而引入的,但已被MSXML6取代。 MSXML4上的客户应该在计划约束允许时立即查看迁移到MSXML6。

再见


1
投票

Delphi附带的TXMLDocument处理WideStrings / Unicode就好了。默认情况下,它使用此处提到的MSXML库。它是一个类似API的DOM。有关示例,请参阅Microsoft


0
投票

存储库@ qazxsw poi经济实惠但不免费,将保存为XML,IN,Registry等。


0
投票

如果您需要检查XSD架构或使用XSL进行转换,您应该查看http://delphi.about.com/library/weekly/aa101904a.htm

© www.soinside.com 2019 - 2024. All rights reserved.