Biorąc pod uwagę ciąg znaków "<table><tr><td>Hello World!</td></tr></table>"
, jaki jest (najłatwiejszy) sposób, aby element reprezentujący go był DOM?Jak mogę przeanalizować ciąg znaków HTML w języku Java?
Odpowiedz
Znalazłem gdzieś (nie pamiętam gdzie):
public static DocumentFragment parseXml(Document doc, String fragment)
{
// Wrap the fragment in an arbitrary element.
fragment = "<fragment>"+fragment+"</fragment>";
try
{
// Create a DOM builder and parse the fragment.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document d = factory.newDocumentBuilder().parse(
new InputSource(new StringReader(fragment)));
// Import the nodes of the new document into doc so that they
// will be compatible with doc.
Node node = doc.importNode(d.getDocumentElement(), true);
// Create the document fragment node to hold the new nodes.
DocumentFragment docfrag = doc.createDocumentFragment();
// Move the nodes into the fragment.
while (node.hasChildNodes())
{
docfrag.appendChild(node.removeChild(node.getFirstChild()));
}
// Return the fragment.
return docfrag;
}
catch (SAXException e)
{
// A parsing error occurred; the XML input is not valid.
}
catch (ParserConfigurationException e)
{
}
catch (IOException e)
{
}
return null;
}
jaki sposób skorzystać z możliwości HTML-przetwórczych, które są wbudowane w Java? Możesz nie wiedzieć, że Swing zawiera wszystkie klasy niezbędne do parsowania HTML. Jeff Heaton pokazuje, jak.
można użyć analizatora składni HTML, który biblioteka Java używana do parsowania HTML w sposób liniowy lub zagnieżdżony. Jest to narzędzie open source i można je znaleźć na SourceForge
Użyłem Jericho HTML Parser To OSS, wykrywa (wybacza) źle sformatowane tagi i jest lekki
oto sposób:
import java.io.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;
public class HtmlParseDemo {
public static void main(String [] args) throws Exception {
Reader reader = new StringReader("<table><tr><td>Hello</td><td>World!</td></tr></table>");
HTMLEditorKit.Parser parser = new ParserDelegator();
parser.parse(reader, new HTMLTableParser(), true);
reader.close();
}
}
class HTMLTableParser extends HTMLEditorKit.ParserCallback {
private boolean encounteredATableRow = false;
public void handleText(char[] data, int pos) {
if(encounteredATableRow) System.out.println(new String(data));
}
public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
if(t == HTML.Tag.TR) encounteredATableRow = true;
}
public void handleEndTag(HTML.Tag t, int pos) {
if(t == HTML.Tag.TR) encounteredATableRow = false;
}
}
Jeśli masz ciąg, który zawiera HTML można użyć Jsoup Taka biblioteka pozwala uzyskać elementy HTML:
String htmlTable= "<table><tr><td>Hello World!</td></tr></table>";
Document doc = Jsoup.parse(htmlTable);
// then use something like this to get your element:
Elements tds = doc.getElementsByTag("td");
// tds will contain this one element: <td>Hello World!</td>
Powodzenia!
Ta biblioteka po prostu wykonuje pracę, dzięki! – negstek
- 1. Jak przeanalizować złożony ciąg znaków w C++?
- 2. Jak przeanalizować ciąg znaków do NSTimeInterval
- 3. Łączenie znaków, aby utworzyć ciąg znaków w języku Java
- 4. Szyfrowanie ciąg znaków Java
- 5. W języku Java: zastąp ciąg znaków w pliku MS Word
- 6. jak mogę przekonwertować ciąg znaków Unicode na ASCII w java
- 7. Jak przeanalizować ciąg znaków i zwrócić zagnieżdżoną tablicę?
- 8. Jak przeanalizować ciąg znaków do dziesiętnych z symbolem waluty?
- 9. Jak mogę uzyskać stronę HTML jako ciąg znaków przez PHP?
- 10. Jak przeanalizować ciąg do BigDecimal?
- 11. Parsowanie ciągów znaków JavaScript w języku Java
- 12. W języku C#, jaki jest najlepszy sposób, aby przeanalizować tę wartość z ciąg znaków?
- 13. Jak sformatować ciąg daty w języku Java?
- 14. Jak porównać ciąg znaków w języku PL/SQL?
- 15. Jak uzyskać ciąg znaków UTC w języku Python?
- 16. Angular2 przeanalizuj ciąg znaków do html
- 17. Java - jak podzielić ciąg znaków plusa?
- 18. Konwertuj ciąg znaków na datę w java
- 19. Konwersja bajtów i znaków w języku Java
- 20. Konwertuj ciąg znaków HTML na obrazki
- 21. Czy mogę rozpakować ciąg znaków?
- 22. Jak renderować ciąg znaków HTML w ASP.NET MVC?
- 23. Sortowanie pojedynczego ciągu znaków w języku Java
- 24. Jak analizować ciąg znaków daty HTTP w języku Python?
- 25. Jak odblokować ciąg znaków Unicode w języku C#
- 26. Konwersja łańcucha znaków na tablicę "Character" w języku Java
- 27. Jak mogę uniknąć specjalnych znaków HTML w JSP?
- 28. Jak przeanalizować ułamek dziesiętny w produkcie Rational w języku Haskell?
- 29. Oblicz szerokość wyświetlania ciągu znaków w języku Java
- 30. Jak mogę pogrubić i podkreślić ciąg znaków w kodzie Android?
Co zrobić, jeśli chcę umieścić wszystkie dane w tablicy w zewnętrznej klasie, zamiast je wydrukować? – CodyBugstein
@Image, idź prosto, masz moje pozwolenie na umieszczenie ich w jakiejś kolekcji zamiast je drukować :) –
Umieściłem je w kolekcji wewnątrz klasy 'HTMLTableParser', a następnie utworzyłem metodę getter, aby je uzyskać. Czy to najlepszy sposób na zrobienie tego? – CodyBugstein