2009-04-02 8 views
2

Ich habe in Problem nach Problem versucht, den HTML-Editor eines Drittanbieters zu tun, was zu tun (ich hoffe) war eine einfache Operation. Wegen dieser Probleme suche ich nach Empfehlungen für einen alternativen HTML-Parser, den ich verwenden könnte, um die Operationen auszuführen.Empfehlungen für einen Java-HTML-Parser/Editor

Hier ist meine Situation, ich habe Span-Tags in meinem HTML (mit einem ID-Attribut, um sie zu identifizieren) und ich möchte einfach ihren Inhalt aufgrund einer Aktualisierung in einem anderen Bereich meines Clients ersetzen. Zum Beispiel:

<html> 
    <body> 
     <p>Hello <span id="1">name</span> you are <span id="2">age</span></p> 
    </body> 
</html> 

Ich habe versucht, die HTMLDocument Klasse in javax.swing.text wie folgt zu verwenden:

Element e; 
e = doc.getElement(document.getDefaultRootElement(), Attribute.ID, "1"); 
document.setInnerHTML(element, "John"); 
e = doc.getElement(document.getDefaultRootElement(), Attribute.ID, "2"); 
document.setInnerHTML(element, "99"); 

aber das zurückgegebene Element ist ein Blattelement und wird die innerHTML- gesetzt wird nicht zulassen, dass . Leider wird das Dokument, Leser & Parser alle von einem Drittanbieter & geliefert, so dass ich es nicht wirklich ändern kann.

Also, was ich gehofft hatte war, dass jemand anderes ein ähnliches Problem hatte und könnte eine alternative Bibliothek empfehlen, dies zu tun?

Vielen Dank im Voraus, B.

Antwort

2

Können Sie das wirklich nicht mit java.swing.text.HTMLDocument erreichen?

Ich habe dies nie versucht, aber auf der Linie der

document.replace(e.getStartOffset(), e.getEndOffset()-e.getStartOffset(), "John", null) 

statt mit setInnerHtml() über die API etwas lesen könnte funktionieren.

+0

Hmm, versuchte dies früher & es hat nicht funktioniert, aber ... das war, weil meine span zusätzliche Attribute zugeordnet hatte (id unter anderem) - wenn ich in e.getAttributes() anstelle der Null übergeben in deinem Beispiel funktioniert es dann gut! Das bringt mir bei, die Waffe zu überspringen und es nicht vollständig zu testen ... – DaddyB

0

HTMLParser ist eine großartige Bibliothek, aber ist LGPL, die möglicherweise nicht für einige kommerzielle Projekte geeignet ist.

Wenn Ihre HTML gut ausgebildet ist, dann können Sie in für Dom4J gehen durch die Knoten zu durchlaufen, und im Fall, wenn Ihr HTML wird Sie Tidy nicht gut ausgebildet in Verbindung mit Dom4J können

0

Ich habe viel Glück auf meinem aktuellen Projekt mit TagSoup.

0

Ich verwendete JTidy sehr erfolgreich. Es nimmt HTML auf, entfernt den Mist, so dass Sie ein korrektes DOM-Objekt haben und dann einfach XPath verwenden, um Ihre Ziele zu ändern.

Verwandte Themen