+ Patch from Vincent Snijders to fix reading of entities

This commit is contained in:
michael 2005-05-02 13:06:51 +00:00
parent d955da19dd
commit 57af5a1f8c

View File

@ -1297,8 +1297,10 @@ end;
predefined in XML: }
procedure TXMLReader.ResolveEntities(RootNode: TDOMNode);
var
Node, NextNode: TDOMNode;
procedure ReplaceEntityRef(EntityNode: TDOMNode; const Replacement: String);
procedure ReplaceEntityRef(EntityNode: TDOMNode; const Replacement: string);
var
PrevSibling, NextSibling: TDOMNode;
begin
@ -1310,6 +1312,8 @@ procedure TXMLReader.ResolveEntities(RootNode: TDOMNode);
RootNode.RemoveChild(EntityNode);
if Assigned(NextSibling) and (NextSibling.NodeType = TEXT_NODE) then
begin
// next sibling is to be removed, so we can't use it anymore
NextNode := NextSibling.NextSibling;
TDOMCharacterData(PrevSibling).AppendData(
TDOMCharacterData(NextSibling).Data);
RootNode.RemoveChild(NextSibling);
@ -1323,13 +1327,11 @@ procedure TXMLReader.ResolveEntities(RootNode: TDOMNode);
RootNode.ReplaceChild(Doc.CreateTextNode(Replacement), EntityNode);
end;
var
Node, NextSibling: TDOMNode;
begin
Node := RootNode.FirstChild;
while Assigned(Node) do
begin
NextSibling := Node.NextSibling;
NextNode := Node.NextSibling;
if Node.NodeType = ENTITY_REFERENCE_NODE then
if Node.NodeName = 'amp' then
ReplaceEntityRef(Node, '&')
@ -1341,7 +1343,7 @@ begin
ReplaceEntityRef(Node, '<')
else if Node.NodeName = 'quot' then
ReplaceEntityRef(Node, '"');
Node := NextSibling;
Node := NextNode;
end;
end;
@ -1389,8 +1391,8 @@ begin
Reader := TXMLReader.Create;
try
Reader.ProcessXML(buf, AFilename);
ADoc := TXMLDocument(Reader.doc);
finally
ADoc := TXMLDocument(Reader.doc);
Reader.Free;
end;
finally
@ -1563,7 +1565,10 @@ end;
end.
{
$Log$
Revision 1.16 2005-03-14 21:10:12 florian
Revision 1.17 2005-05-02 13:06:51 michael
+ Patch from Vincent Snijders to fix reading of entities
Revision 1.16 2005/03/14 21:10:12 florian
* adapated for the new widestring manager
Revision 1.15 2005/02/14 17:13:18 peter