我正在使用Delphi 2009并希望运行一些XML数据.我听说nativeXML是最方便的方法之一.那么我该如何安装这个库?
如下所示,最新的NativeXml(v4.03 svn)将元素的值视为三个部分:前面的空白,char数据和尾随空白.因此,可以迭代地检查元素的子节点以获得具有前导和尾随空白的值.但是,对于传统的NativeXml(v3.10),这不是必需的,因此我想知道什么是首选方式(可能没有这样的迭代检查/字符串连接)来执行此操作?
<?xml version="1.0" encoding="UTF-8" ?>
<CDXML><s>beforeLineBreak
</s></CDXML>
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="UTF-8" ?>
<CDXML><s>
afterLineBreak</s></CDXML>
Run Code Online (Sandbox Code Playgroud)
procedure XXX310;
var
element: TXmlNode;
elementType: TElementType;
begin
elementType := element.ElementType;
element.ElementType := xeCharData;
... element.ValueAsString ...
element.ElementType := elementType;
end;
Run Code Online (Sandbox Code Playgroud)
function TXmlNode.GetValueAsString: UTF8String;
begin
if FElementType = xeNormal then
Result := UnEscapeString(sdUTF8Trim(FValue))
else
Result := UnEscapeString(FValue);
end;
Run Code Online (Sandbox Code Playgroud)
procedure XXX403;
var
tempString: String;
element: TXmlNode; // actually TsdElement
begin
tempString := '';
for I := element.DirectNodeCount to …Run Code Online (Sandbox Code Playgroud) 我试着让这个库使用线程,但是我无法使用syncronize将结果返回到主线程.
在excute方法中创建xml没问题.
有人用过吗?
TMyThread = class(TThread)
private
ADoc : TNativeXml;
protected
procedure Execute; override;
procedure DoProgress;
public
constructor Create(CreateSuspended: Boolean);
end;
{ TMyThread }
constructor TMyThread.Create(CreateSuspended: Boolean);
begin
inherited;
end;
procedure TMyThread.DoProgress;
begin
formMain.meminfo.Lines.Add(ADoc.WriteToString);
end;
procedure TMyThread.Execute;
var i,j : integer;
begin
inherited;
begin
ADoc:= ADoc.Create(formMain);
try
Adoc.XmlFormat := xfReadable;
ADoc.LoadFromFile('test.xml');
Synchronize(DoProgress);
finally
FreeAndNil(ADoc);
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)