Można użyć IHTMLDocument2
DOM do analizowania cokolwiek elementy trzeba z HTML:
uses ActiveX, MSHTML;
const
HTML =
'<div class="tvRow tvFirst hasLabel tvFirst" title="example1">' +
'<label class="tvLabel">Name:</label>' +
'<span class="tvValue">Value</span>' +
'<div class="clear"></div>' +
'</div>';
procedure TForm1.Button1Click(Sender: TObject);
var
doc: OleVariant;
el: OleVariant;
i: Integer;
begin
doc := coHTMLDocument.Create as IHTMLDocument2;
doc.write(HTML);
doc.close;
ShowMessage(doc.body.innerHTML);
for i := 0 to doc.body.all.length - 1 do
begin
el := doc.body.all.item(i);
if (el.tagName = 'LABEL') and (el.className = 'tvLabel') then
ShowMessage(el.innerText);
if (el.tagName = 'SPAN') and (el.className = 'tvValue') then
ShowMessage(el.innerText);
end;
end;
chciałem wspomnieć o innym bardzo ładne HTML parsera znalazłem dzisiaj: htmlp
(Delphi HTML DOM Parser i konwerter). Nie jest to oczywiście tak elastyczny jak IHTMLDocument2
, ale jest bardzo łatwy w obsłudze, szybki, darmowy i obsługuje Unicode dla starszych wersji Delphi.
wykorzystanie próbki:
uses HtmlParser, DomCore;
function GetDocBody(HtmlDoc: TDocument): TElement;
var
i: integer;
node: TNode;
begin
Result := nil;
for i := 0 to HtmlDoc.documentElement.childNodes.length - 1 do
begin
node := HtmlDoc.documentElement.childNodes.item(i);
if node.nodeName = 'body' then
begin
Result := node as TElement;
Break;
end;
end;
end;
procedure THTMLForm.Button2Click(Sender: TObject);
var
HtmlParser: THtmlParser;
HtmlDoc: TDocument;
i: Integer;
body, el: TElement;
node: TNode;
begin
HtmlParser := THtmlParser.Create;
try
HtmlDoc := HtmlParser.parseString(HTML);
try
body := GetDocBody(HtmlDoc);
if Assigned(body) then
for i := 0 to body.childNodes.length - 1 do
begin
node := body.childNodes.item(i);
if (node is TElement) then
begin
el := node as TElement;
if (el.tagName = 'div') and (el.GetAttribute('class') = 'tvRow tvFirst hasLabel tvFirst') then
begin
// iterate el.childNodes here...
ShowMessage(IntToStr(el.childNodes.length));
end;
end;
end;
finally
HtmlDoc.Free;
end;
finally
HtmlParser.Free
end;
end;
Witamy StackOverflow. AFAIK nie ma standardowego sposobu konwersji HTML na JSON. Edytuj swoje pytanie, aby było bardziej precyzyjne i podaj kilka przykładów tego, co próbujesz osiągnąć, jeśli oczekujesz przydatnej odpowiedzi, ponieważ w obecnym stanie Twoje pytanie jest zbyt szerokie, a kandydat do zamknięcia. – jachguate
Wydaje mi się, że gdy masz coś * zdolnego * do analizowania dokumentu XHTML, tak że można go bezstratnie konwertować do dokumentu JSON, w rzeczywistości * nie potrzebujesz * JSON. Po prostu użyj dowolnej struktury, którą interpreter XHTML wygenerował bezpośrednio. W tym momencie nie potrzebujesz konwertera HTML-to-JSON; potrzebujesz tylko biblioteki HTML, która pozwala programowo uzyskać dostęp do dokumentu. –
@RobKennedy Parsowanie JSON jest szybsze niż XML lub HTML. Przepraszam za złamanie twojej bańki. :) –