最近很多小伙伴都在问Delphi中的XMLDocument类详解(9)-关于HasChildNodes与IsTextElement和delphixml解析这两个问题,那么本篇文章就来给大家详细解答一下
最近很多小伙伴都在问Delphi 中的 XMLDocument 类详解(9) - 关于 HasChildNodes 与 IsTextElement和delphi xml解析这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展delphi txmldocument报错 no active document、delphi – 通过TXMLDocument访问IXMLDOMDocument2?、Delphi 中的 XMLDocument 类详解 (14) - 遍历 XML 文件、Delphi 中的 XMLDocument 类详解 - 创建与保存 xml等相关知识,下面开始了哦!
本文目录一览:- Delphi 中的 XMLDocument 类详解(9) - 关于 HasChildNodes 与 IsTextElement(delphi xml解析)
- delphi txmldocument报错 no active document
- delphi – 通过TXMLDocument访问IXMLDOMDocument2?
- Delphi 中的 XMLDocument 类详解 (14) - 遍历 XML 文件
- Delphi 中的 XMLDocument 类详解 - 创建与保存 xml
Delphi 中的 XMLDocument 类详解(9) - 关于 HasChildNodes 与 IsTextElement(delphi xml解析)
总结
以上是小编为你收集整理的Delphi 中的 XMLDocument 类详解(9) - 关于 HasChildNodes 与 IsTextElement全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
delphi txmldocument报错 no active document
总结
以上是小编为你收集整理的delphi txmldocument报错 no active document全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
delphi – 通过TXMLDocument访问IXMLDOMDocument2?
但是,我需要启用XSLT Javascript函数(< msxml:script>标记)和 – 经过大量谷歌搜索 – 这意味着我需要将IXMLDOMDocument2的AllowXsltScript属性设置为true.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms760290(v=vs.85).aspx
我已经成功实现了这一点 – 但只能通过在msxmldom.pas中修改Delphi库函数CreateDOMDocument的源代码.
function CreateDOMDocument: IXMLDOMDocument; var doc :IXMLDOMDocument2; begin doc := TryObjectCreate([CLASS_DOMDocument60,CLASS_DOMDocument40,CLASS_DOMDocument30,CLASS_DOMDocument26,msxml.CLASS_DOMDocument]) as IXMLDOMDocument2; if not Assigned(doc) then raise DOMException.Create(SMSDOMnotinstalled); doc.setProperty('AllowXsltScript',true); // Allow XSLT scripts!! Result := doc; end;
显然这远非令人满意 – 所以如何在不修改库代码的情况下访问IXMLDOMDocument2对象?
解决方法
unit Unit27; interface uses xmldoc,xmlintf,msxml,msxmldom,Forms,SysUtils,ActiveX,ComObj,XmlDom,XmlConst,Windows,Messages,Classes,Controls,StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function TryObjectCreate(const GuidList: array of TGuid): IUnkNown; var I: Integer; Status: HResult; begin Status := S_OK; for I := Low(GuidList) to High(GuidList) do begin Status := CoCreateInstance(GuidList[I],nil,CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER,Idispatch,Result); if Status = S_OK then Exit; end; OleCheck(Status); end; function CreateDOMDocument2: IXMLDOMDocument; var Doc2 : IXMLDOMDocument2; begin Doc2 := TryObjectCreate([CLASS_DOMDocument60,msxml.CLASS_DOMDocument]) as IXMLDOMDocument2; if not Assigned(Doc2) then raise DOMException.Create(SMSDOMnotinstalled); Doc2.setProperty('AllowXsltScript',true); Result := Doc2; end; procedure TForm1.FormCreate(Sender: TObject); var Doc : IXMLDocument; begin Doc := TXMLDocument.Create(nil); Doc.LoadFromFile('c:\temp\test.xml'); end; initialization MSXMLDOMDocumentCreate := CreateDOMDocument2; end.
Delphi 中的 XMLDocument 类详解 (14) - 遍历 XML 文件
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls;
type
TForm1 = class(TForm)
XMLDocument1: TXMLDocument;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//读取 xml 的函数
{
功能1: 传入一个节点参数, 返回节点及其包含的所有内容;
功能2: 排除了空节点.
}
function ReadXml(node: IXMLNode): string;
var
nodeList,attrList: IXMLNodeList;
str,strName,strValue: string;
i: Integer;
begin
Result := '''';
if not node.HasChildNodes then Exit;
attrList := node.AttributeNodes; {根节点的属性列表}
nodeList := node.ChildNodes; {根节点下的子节点列表}
str := ''<'' + node.NodeName;
{先读取属性}
for i := 0 to attrList.Count - 1 do
begin
strName := attrList[i].NodeName;
strValue := attrList[i].NodeValue;
str := str + '' '' + strName + ''='' + AnsiQuotedStr(strValue, ''"'');
end;
str := str + ''>'' + sLineBreak; {sLineBreak 是常量, 相当于 #13#10}
{读取子节点}
for i := 0 to nodeList.Count - 1 do
begin
strName := nodeList[i].NodeName;
if nodeList[i].IsTextElement then
begin
strValue := nodeList[i].NodeValue;
str := str + ''<'' + strName + ''>'' + strValue + ''</'' + strName + ''>'' + sLineBreak;
end else if nodeList[i].HasChildNodes then
begin
str := str + ReadXml(nodeList[i]); {这是最关键的递归调用}
str := str + ''</'' + strName + ''>'' + sLineBreak; {封口}
end;
end;
str := str + ''</'' + node.NodeName + ''>''; {封口}
Result := str;
end;
//调用测试(1):
procedure TForm1.Button1Click(Sender: TObject);
var
str,s1,s2: string;
begin
XMLDocument1.LoadFromFile(''c:\temp\test.xml'');
{必须用万一提供的 xml 测试文件, 才能有相同的返回值}
{读取文件头}
s1 := AnsiQuotedStr(XMLDocument1.Version, ''"''); {读出版本, 并添加双引号}
s2 := AnsiQuotedStr(XMLDocument1.Encoding, ''"''); {读出字符集, 并添加双引号}
str := Format(''<?xml version=%s encoding=%s?>'',[s1,s2]); {这就是文件头了}
str := str + sLineBreak + ReadXml(XMLDocument1.DocumentElement);
ShowMessage(str); {返回 xml 包含问头在内的所有内容}
end;
//调用测试(2)
procedure TForm1.Button2Click(Sender: TObject);
var
str: string;
node: IXMLNode;
begin
XMLDocument1.LoadFromFile(''c:\temp\test.xml'');
node := XMLDocument1.DocumentElement.ChildNodes[0];
str := ReadXml(node);
ShowMessage(str); {返回返回根节点下第一个子节点的所有内容}
end;
end.
Delphi 中的 XMLDocument 类详解 - 创建与保存 xml
总结
以上是小编为你收集整理的Delphi 中的 XMLDocument 类详解 - 创建与保存 xml全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
我们今天的关于Delphi 中的 XMLDocument 类详解(9) - 关于 HasChildNodes 与 IsTextElement和delphi xml解析的分享已经告一段落,感谢您的关注,如果您想了解更多关于delphi txmldocument报错 no active document、delphi – 通过TXMLDocument访问IXMLDOMDocument2?、Delphi 中的 XMLDocument 类详解 (14) - 遍历 XML 文件、Delphi 中的 XMLDocument 类详解 - 创建与保存 xml的相关信息,请在本站查询。
本文标签: