mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 09:19:23 +02:00
+ Patch from Vincent Snijders to fix reading of entities
This commit is contained in:
parent
d955da19dd
commit
57af5a1f8c
@ -1297,8 +1297,10 @@ end;
|
|||||||
predefined in XML: }
|
predefined in XML: }
|
||||||
|
|
||||||
procedure TXMLReader.ResolveEntities(RootNode: TDOMNode);
|
procedure TXMLReader.ResolveEntities(RootNode: TDOMNode);
|
||||||
|
var
|
||||||
|
Node, NextNode: TDOMNode;
|
||||||
|
|
||||||
procedure ReplaceEntityRef(EntityNode: TDOMNode; const Replacement: String);
|
procedure ReplaceEntityRef(EntityNode: TDOMNode; const Replacement: string);
|
||||||
var
|
var
|
||||||
PrevSibling, NextSibling: TDOMNode;
|
PrevSibling, NextSibling: TDOMNode;
|
||||||
begin
|
begin
|
||||||
@ -1310,6 +1312,8 @@ procedure TXMLReader.ResolveEntities(RootNode: TDOMNode);
|
|||||||
RootNode.RemoveChild(EntityNode);
|
RootNode.RemoveChild(EntityNode);
|
||||||
if Assigned(NextSibling) and (NextSibling.NodeType = TEXT_NODE) then
|
if Assigned(NextSibling) and (NextSibling.NodeType = TEXT_NODE) then
|
||||||
begin
|
begin
|
||||||
|
// next sibling is to be removed, so we can't use it anymore
|
||||||
|
NextNode := NextSibling.NextSibling;
|
||||||
TDOMCharacterData(PrevSibling).AppendData(
|
TDOMCharacterData(PrevSibling).AppendData(
|
||||||
TDOMCharacterData(NextSibling).Data);
|
TDOMCharacterData(NextSibling).Data);
|
||||||
RootNode.RemoveChild(NextSibling);
|
RootNode.RemoveChild(NextSibling);
|
||||||
@ -1323,13 +1327,11 @@ procedure TXMLReader.ResolveEntities(RootNode: TDOMNode);
|
|||||||
RootNode.ReplaceChild(Doc.CreateTextNode(Replacement), EntityNode);
|
RootNode.ReplaceChild(Doc.CreateTextNode(Replacement), EntityNode);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
|
||||||
Node, NextSibling: TDOMNode;
|
|
||||||
begin
|
begin
|
||||||
Node := RootNode.FirstChild;
|
Node := RootNode.FirstChild;
|
||||||
while Assigned(Node) do
|
while Assigned(Node) do
|
||||||
begin
|
begin
|
||||||
NextSibling := Node.NextSibling;
|
NextNode := Node.NextSibling;
|
||||||
if Node.NodeType = ENTITY_REFERENCE_NODE then
|
if Node.NodeType = ENTITY_REFERENCE_NODE then
|
||||||
if Node.NodeName = 'amp' then
|
if Node.NodeName = 'amp' then
|
||||||
ReplaceEntityRef(Node, '&')
|
ReplaceEntityRef(Node, '&')
|
||||||
@ -1341,7 +1343,7 @@ begin
|
|||||||
ReplaceEntityRef(Node, '<')
|
ReplaceEntityRef(Node, '<')
|
||||||
else if Node.NodeName = 'quot' then
|
else if Node.NodeName = 'quot' then
|
||||||
ReplaceEntityRef(Node, '"');
|
ReplaceEntityRef(Node, '"');
|
||||||
Node := NextSibling;
|
Node := NextNode;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1389,8 +1391,8 @@ begin
|
|||||||
Reader := TXMLReader.Create;
|
Reader := TXMLReader.Create;
|
||||||
try
|
try
|
||||||
Reader.ProcessXML(buf, AFilename);
|
Reader.ProcessXML(buf, AFilename);
|
||||||
ADoc := TXMLDocument(Reader.doc);
|
|
||||||
finally
|
finally
|
||||||
|
ADoc := TXMLDocument(Reader.doc);
|
||||||
Reader.Free;
|
Reader.Free;
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
@ -1563,7 +1565,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$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
|
* adapated for the new widestring manager
|
||||||
|
|
||||||
Revision 1.15 2005/02/14 17:13:18 peter
|
Revision 1.15 2005/02/14 17:13:18 peter
|
||||||
|
Loading…
Reference in New Issue
Block a user