mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 06:39:25 +01: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