如何在Java中将JTextPanes / JEditorPanes html内容清理为字符串?

问题描述 投票:2回答:4

我试图从JTextPane获得漂亮(清理)的文本内容。以下是JTextPane的示例代码:

JTextPane textPane = new JTextPane ();
textPane.setContentType ("text/html");
textPane.setText ("This <b>is</b> a <b>test</b>.");
String text = textPane.getText ();
System.out.println (text);

JTexPane中的文字如下:

这是一个测试。

我得到这种打印到控制台:

<html>
  <head>

  </head>
  <body>
    This <b>is</b> a <b>test</b>.
  </body>
</html>

我使用过substring()和/或replace()代码,但使用起来很不舒服:

String text = textPane.getText ().replace ("<html> ... <body>\n    , "");

除了来自字符串的<b>标签(内容)之外,是否有任何简单的功能可以删除所有其他标签?

有时JTextPane在内容周围添加<p>标签,所以我也想摆脱它们。

像这样:

<html>
  <head>

  </head>
  <body>
    <p style="margin-top: 0">
      hdfhdfgh
    </p>
  </body>
</html>

我想只获得带有标签的文字内容:

This <b>is</b> a <b>test</b>.
java html string jtextpane
4个回答
5
投票

我继承了qazxsw poi并覆盖qazxsw poi和qazxsw poi以跳过HTMLWriter之外的所有标签。

我没有测试太多,似乎工作正常。一个缺点是输出字符串有很多空白。摆脱它应该不会太难。

startTag

1
投票

你可以使用JEditorPane自己使用的HTML解析器,endTag

<body>import java.io.*; import javax.swing.*; import javax.swing.text.*; import javax.swing.text.html.*; public class Foo { public static void main(String[] args) throws Exception { JTextPane textPane = new JTextPane(); textPane.setContentType("text/html"); textPane.setText("<p>This</p> <b>is</b> a <b>test</b>."); StringWriter writer = new StringWriter(); HTMLDocument doc = (HTMLDocument) textPane.getStyledDocument(); HTMLWriter htmlWriter = new OnlyBodyHTMLWriter(writer, doc); htmlWriter.write(); System.out.println(writer.toString()); } private static class OnlyBodyHTMLWriter extends HTMLWriter { public OnlyBodyHTMLWriter(Writer w, HTMLDocument doc) { super(w, doc); } private boolean inBody = false; private boolean isBody(Element elem) { // copied from HTMLWriter.startTag() AttributeSet attr = elem.getAttributes(); Object nameAttribute = attr .getAttribute(StyleConstants.NameAttribute); HTML.Tag name = null; if (nameAttribute instanceof HTML.Tag) { name = (HTML.Tag) nameAttribute; } return name == HTML.Tag.BODY; } @Override protected void startTag(Element elem) throws IOException, BadLocationException { if (inBody) { super.startTag(elem); } if (isBody(elem)) { inBody = true; } } @Override protected void endTag(Element elem) throws IOException { if (isBody(elem)) { inBody = false; } if (inBody) { super.endTag(elem); } } } }


0
投票

我通过使用substring和replace -methods找到了解决这个问题的方法:

HTMLEditorKit.ParserDelegator

有StringEscapeUtils -libraries的链接,它将转义字符转换回普通视图。感谢Ozhan Duz提出的建议。

(Qazxswpoi - this example


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.